Power management synchronization messaging system

ABSTRACT

A multi-die package for a microprocessor provides a power management synchronization system. The package has a plurality of dies. Each die has a plurality of cores, including a single master core. A plurality of sideband non-system-bus inter-die communication wires communicatively couple the dies to each other for a purpose of synchronizing power management. The master core of each die is configured to use one and only one of the inter-die communication wires to transmit power management synchronization messages to each of the other master cores. The master core of each die is also configured to receive power management synchronization messages from each of the other master cores via one or more inter-die communication wires. The cores use this system of inter-die communication wires to synchronize management of resources that affect both the performance and power consumption of the cores.

CROSS REFERENCE TO RELATED APPLICATION(S)

This application is a continuation of U.S. patent application Ser. No.14/522,931, entitled “Power State Synchronization in a Multi-CoreProcessor,” which is a division of U.S. patent application Ser. No.13/299,239, filed Nov. 17, 2011, which claims the benefit of U.S.Provisional Application, Ser. No. 61/426,470, filed Dec. 22, 2010,entitled “Multi-Core Internal Bypass Bus,” each of which is incorporatedby reference in its entirety.

This application is related to the following co-pending U.S. PatentApplications which are concurrently filed herewith, each of which ishereby incorporated by reference in its entirety.

Serial Number Filing Date Patent No. 13/299,014 Nov. 17, 2011 N/A13/299,122 Nov. 17, 2011 8,635,476 13/299,171 Nov. 17, 2011 8,637,21213/299,207 Nov. 17, 2011 8,930,676 13/299,225 Nov. 17, 2011 8,631,25613/299,239 Nov. 17, 2011 8,972,707

FIELD OF THE INVENTION

The present invention relates to the field of multi-core microprocessordesign, and more particularly, to systems for synchronizing power statemanagement between cores.

BACKGROUND OF THE INVENTION

A primary way in which modern microprocessors reduce their powerconsumption is to reduce the frequency and/or the voltage at which themicroprocessor is operating. Additionally, in some instances themicroprocessor may be able to allow clock signals to be disabled toportions of its circuitry. Finally, in some instances the microprocessormay even remove power altogether to portions of its circuitry.Furthermore, there are times when peak performance is required of themicroprocessor such that it needs to be operating at its highest voltageand frequency. The microprocessor takes power management actions tocontrol the voltage and frequency levels and clock and power disablementof the microprocessor. Typically the microprocessor takes the powermanagement actions in response to directions from the operating system.The well-known x86 MWAIT instruction is an example of an instructionthat the operating system may execute to request entry to animplementation-dependent optimized state, which the operating systemuses to perform advanced power management. The optimized state may be asleeping, or idle, state. The well-known Advanced Configuration PowerInterface (ACPI) Specification facilitates operating system-directedpower management by defining operational or power-management relatedstates (such as “C-states” and “P-states”).

Performing the power management actions is complicated by the fact thatmany modern microprocessors are multi-core processors in which multipleprocessing cores share one or more power management-related resources.For example, the cores may share voltage sources and/or clock sources.Furthermore, computing systems that include a multi-core processor alsotypically include a chipset that includes bus bridges for bridging theprocessor bus to other buses of the system, such as to peripheral I/Obuses, and includes a memory controller for interfacing the multi-coreprocessor to a system memory. The chipset may be intimately involved inthe various power management actions and may require coordinationbetween itself and the multi-core processor.

More specifically, in some systems, with the permission of themulti-core processor, the chipset may disable a clock signal on theprocessor bus that the processor receives and uses to generate most ofits own internal clock signals. In the case of a multi-core processor,all of the cores that use the bus clock must be ready for the chipset todisable the bus clock. That is, the chipset cannot be given permissionto disable the bus clock until all the cores are prepared for thechipset to do so.

Still further, normally the chipset snoops the cache memories on theprocessor bus. For example, when a peripheral device generates a memoryaccess on a peripheral bus, the chipset echoes the memory access on theprocessor bus so that the processor may snoop its cache memories todetermine whether it holds data at the snoop address. For example, USBdevices are notorious for periodically polling memory locations, whichgenerates periodic snoop cycles on the processor bus. In some systems,the multi-core processor may enter a deep sleep state in which itflushes its cache memories and disables the clock signals to the cachesin order to save power. In this state, it is wasteful for the multi-coreprocessor to wake up in response to the snoop cycle on the processor busto snoop its caches (which will never return a hit because they areempty) and to then go back to sleep. Therefore, with the permission ofthe multi-core processor, the chipset may be authorized not to generatesnoop cycles on the processor bus in order to achieve additional powersavings. However, again, all of the cores must be ready for the chipsetto turn off snooping. That is, the chipset cannot be given permission toturn off snooping until all the cores are prepared for the chipset to doso.

U.S. Pat. No. 7,451,333 issued to Naveh et al. (hereinafter Naveh)discloses a multi-core microprocessor that includes multiple processingcores. Each of the cores is capable of detecting a command that requeststhe core to transition to an idle state. The multi-core processor alsoincludes Hardware Coordination Logic (HCL). The HCL receives idle statestatus from the cores and manages power consumption of the cores basedon the commands and the idle state status of the cores. Morespecifically, the HCL determines whether all the cores have detected acommand requesting a transition to a common state. If not, the HCLselects a shallowest state among the commanded idle states as the idlestate for each core. However, if the HCL detects a command requestingtransition to a common state, the HCL can initiate shared power savingfeatures such as performance state reductions, a shutdown of a sharedphase-locked-loop (PLL), or saving of an execution context of theprocessor. The HCL can also prevent external break events from reachingthe cores and can transition all the cores to the common state. Inparticular, the HCL can conduct a handshake sequence with the chipset totransition the cores to the common state.

In an article by Alon Naveh et al. entitled “Power and ThermalManagement in the Intel Core Duo Processor” which appeared in the May15, 2006 issue of the Intel Technology Journal, Naveh et al. describes aconsistent C-state control architecture using an off-core hardwarecoordination logic (HCL), located in a shared region of the die orplatform, that serves as a layer between the individual cores and sharedresources on the die and platform. The HCL determines the required CPUC-state based on the cores' individual requests, controls the state ofthe shared resources, and emulates a legacy single-core processor toimplement the C-state entry protocol with the chipset.

In the scheme disclosed by both Naveh references, the HCL is centralizednon-core logic outside the cores themselves that performs powermanagement actions on behalf of all the cores. This centralized non-corelogic solution may be disadvantageous, especially if the HCL is requiredto reside on the same die as the cores in that it may beyield-prohibitive due to large die sizes, particularly in configurationsin which it would be desirable to include many cores on the die.

BRIEF SUMMARY OF INVENTION

The invention can be characterized in many ways ranging from broad tonarrow and across statutory categories. According to onecharacterization, a multi-die package for a microprocessor is provided.The package has a plurality of dies. Each die has a plurality of cores,including a single master core. A plurality of sideband non-system-businter-die communication wires communicatively couple the dies to eachother for a purpose of synchronizing power management. The master coreof each die is configured to use one and only one of the inter-diecommunication wires to transmit power management synchronizationmessages to each of the other master cores. The master core of each dieis also configured to receive power management synchronization messagesfrom each of the other master cores via one or more inter-diecommunication wires.

According to another characterization, a plurality of sidebandnon-system-bus inter-die communication channels communicatively couplethe dies to each other to enable them to synchronize management ofresources shared by the dies. Each communication channel is a one-waychannel with a single transmitting end and one or more receiving ends,the channel being dedicated to enabling a single master core to transmitpower management synchronization messages to the other master cores, andthe channel coupling the master core on its transmitting end to the oneor more other master cores on their receiving ends. Each master core isconnected on the transmitting end to a single communication channel andon the receiving end to one or more communication channels. Also, eachmaster core is configured to transmit power management synchronizationmessages to the one or more other master cores using the single channelon which it can transmit power management synchronization messages.Likewise, each master core is configured to receive power managementsynchronization messages from the one or more other master cores via theone or more communication channels to which it is connected on thereceiving end.

BRIEF DESCRIPTION OF THE DRAWINGS

FIG. 1 is a block diagram illustrating one embodiment of a computersystem that performs decentralized power management distributed amongmultiple processing cores of a dual-die quad-core microprocessor.

FIG. 2 is a block diagram illustrating in detail a representative one ofthe cores of FIG. 1.

FIG. 3 is a flowchart illustrating operation, by a core, of oneembodiment of a power-state management routine of a system performingdecentralized power management distributed among the multiple processingcores of the multi-core microprocessor.

FIGS. 4A, 4B AND 4C comprise a flowchart illustrating operation, by acore, of one embodiment of a power-state synchronization routineintegral to a composite power state discovery process of the system ofFIG. 3.

FIG. 5 is a flowchart illustrating operation, by a core, of oneembodiment of a wake-and-resume routine in response to an event thatwakes it up from a sleep state.

FIG. 6 is a flowchart illustrating operation, by a core, of aninter-core interrupt handling routine in response to receiving aninter-core interrupt.

FIG. 7 is a flow diagram illustrating an example of operation of acomposite power-state discovery process according to the description ofFIGS. 3 through 6.

FIG. 8 is a flowchart is a flow diagram illustrating another example ofoperation of a composite power-state discovery process according to thedescription of FIGS. 3 through 6.

FIG. 9 is a block diagram illustrating another embodiment of a computersystem that performs decentralized power management distributed amongmultiple processing cores of an octa-core microprocessor having fourdual-core dies on a single package.

FIGS. 10A-C comprise a flowchart illustrating operation, by a core, ofone embodiment of a power-state synchronization routine integral to acomposite power state discovery process of the system of FIG. 9.

FIG. 11 is a block diagram illustrating another embodiment of a computersystem that performs decentralized power management distributed amongmultiple processing cores of an octa-core microprocessor having fourdual-core dies, distributed on two packages, using FIG. 10's power-statesynchronization routine.

FIG. 12 is a block diagram illustrating another embodiment of a computersystem that performs decentralized power management distributed amongmultiple processing cores of an octa-core microprocessor, that, likeFIG. 11, has four dual-core dies, but whose cores, unlike FIG. 11, areinterrelated with each other in accordance with a deeper hierarchicalcoordination system.

FIGS. 13A-D comprise a flowchart illustrating operation, by a core, ofone embodiment of a power-state synchronization routine integral to acomposite power state discovery process of the system of FIG. 12.

FIG. 14 is a block diagram illustrating another embodiment of a computersystem that performs decentralized power management distributed amongmultiple processing cores of an octa-core microprocessor that, like FIG.9, has four dual-core dies on a single package, but whose cores, unlikeFIG. 9, are interrelated with each other in accordance with a deeperhierarchical coordination system.

FIG. 15 is a block diagram illustrating another embodiment of a computersystem that performs decentralized power management distributed amongmultiple processing cores of an octa-core microprocessor has twoquad-core dies on a single package.

FIG. 16 is a block diagram illustrating yet another embodiment of acomputer system that performs decentralized power management distributedamong multiple processing cores of an octa-core microprocessor.

FIGS. 17A-C comprise a flowchart illustrating operation, by a core, ofone embodiment of a power-state synchronization routine integral to acomposite power state discovery process of the system of FIG. 16.

FIG. 18 is a block diagram illustrating yet another embodiment of acomputer system that performs decentralized power management distributedamong the cores of a dual-core, single die microprocessor.

FIG. 19 is a block diagram illustrating yet another embodiment of acomputer system that performs decentralized power management distributedamong the cores of a dual-core microprocessor having two single-coredies.

FIG. 20 is a block diagram illustrating yet another embodiment of acomputer system that performs decentralized power management distributedamong the cores of a dual-core microprocessor having two single-core,single-die packages.

FIG. 21 is a block diagram illustrating yet another embodiment of acomputer system that performs decentralized power management distributedamong the cores of an octa-core microprocessor having two packages, oneof which has three dual-core dies, and the other of which has a singledual-core die.

FIG. 22 is a block diagram illustrating yet another embodiment of acomputer system that performs decentralized power management distributedamong the cores of an octa-core microprocessor similar to that of FIG.21, but having a deeper hierarchical coordination system.

FIG. 23 is a flowchart illustrating another embodiment of operatingstate synchronization logic, implemented on a core, that supports adomain-differentiated operating state hierarchy coordination system andis scalable to different domain depths.

DETAILED DESCRIPTION OF THE INVENTION

Described herein are embodiments of systems and methods forcoordinating, synchronizing, managing, and implementing power, sleep oroperating states on a multi-core processor, using decentralized,distributed logic that is resident and duplicated on each core. Beforedescribing each of the Figures, which represent detailed embodiments,more general applicable concepts of the invention are introduced below.

I. Multi-Layer Multi-Core Processor Concepts

As used herein, a multi-core processor generally refers to a processorcomprising a plurality of enabled physical cores that are eachconfigured to fetch, decode, and execute instructions conforming to aninstruction set architecture. Generally, the multi-core processor iscoupled by a system bus, ultimately shared by all of the cores, to achipset providing access to peripheral buses to various devices. In someembodiments, the system bus is a front-side bus that is an externalinterface from the processor to the rest of the computer system. In someembodiments, the chipset also centralizes access to a shared main memoryand a shared graphics controller.

The cores of the multi-core processor may be packaged in one or moredies that include multiple cores, as described in the section of Ser.No. 61/426,470, filed Dec. 22, 2010, entitled “Multi-Core ProcessorInternal Bypass Bus,” and its concurrently filed nonprovisional(CNTR.2503), which are incorporated herein by reference. As set forththerein, a typical die is a piece of semiconductor wafer that has beendiced or cut into a single physical entity, and typically has at leastone set of physical I/O landing pads. For instance, some dual core dieshave two sets of I/O pads, one for each of its cores. Other dual coredies have a single set of I/O pads that are shared between its twincores. Some quad core dies have two sets of I/O pads, one for each oftwo sets of twin cores. Multiple configurations are possible.

Furthermore, a multi-core processor may also provide a package thathosts multiple dies. A “package” is a substrate on which dies reside orare mounted. The “package” may provide a single set of pins forconnection to a motherboard and associated processor bus. The package'ssubstrate includes wire nets or traces connecting the pads of the diesto shared pins of the package.

Further levels of stratification are possible. For example, anadditional layer—described herein as a “platform”—may be providedbetween multiple packages mounted on that platform and an underlyingmotherboard. The platform may be, in many ways, like the packagedescribed above, comprising a substrate with wire nets or tracesconnecting the pins of each package and the shared pins of the platform.

Applying the concepts above, in one example, a multi-package processorcan be characterized as a platform of N2 packages, having N1 dies perpackage, and NO cores per die, where N2, N1, and NO are each greaterthan or equal to one, and at least one of N2, N1, and NO is greater thanor equal to two.

II. Inter-Core Communication Structures

As stated above, some disadvantages of the use of off-core, but on-diehardware coordination logic (HCL) to implement restricted activitiesrequiring inter-core coordination includes more complicated, lesssymmetric, and lower-yielding die designs, as well as scalingchallenges. An alternative is to perform all such coordination using thechipset itself, but this potentially requires transactions between eachcore and the chipset on the system bus in order to communicateapplicable values to the chipset. Such coordination also typicallyrequires implementation through system software, such as BIOS, overwhich the manufacturer may have limited or no control. To overcome thedisadvantages of both conventional approaches, some embodiments of thepresent invention utilize sideband connections between cores of themulti-core processor. These sideband connections are not connected tothe physical pins of the package; hence they do not carry signals off ofthe package; nor do communications exchanged through them requirecorresponding transactions on the system bus.

For example, as described in CNTR.2503, each die may provide a bypassbus between cores of the die. The bypass bus is not connected to thephysical pads of the die; hence it does not carry signals off the dualcore die. The bypass bus also provides improved quality signals betweenthe cores, and enables the cores to communicate or coordinate with eachother without using the system bus. Multiple variations arecontemplated. For example, as described in CNTR.2503, a quad-core diemay provide a bypass bus between two sets of twin cores. Alternatively,as described in one embodiment below, a quad-core die may provide bypassbuses between each of two sets of cores of a die and another bypass busbetween select cores from the two sets. In another embodiment, aquad-core die may provide inter-core bypass buses between each of thecores, as described below in connection with FIG. 16. And in yet anotherembodiment, a quad-core die may provide inter-core bypass buses betweena first and second core, the second core and a third core, the third anda fourth core, and the first and fourth cores, without providinginter-core bypass buses between the first and third cores or between thesecond and fourth cores. A similar sideband configuration, albeitbetween cores distributed on two dual-core dies, is illustrated in thesection of Ser. No. 61/426,470, filed Dec. 22, 2010, entitled“Distributed Management of a Shared Power Source to a Multi-CoreMicroprocessor,” and its concurrently filed nonprovisional (CNTR.2534),which are incorporated herein by reference.

Also, the present invention contemplates sets of inter-corecommunication wires less extensive than CNTR.2503's bypass bus, such asalternative embodiments described in the section of Ser. No. 61/426,470,filed Dec. 22, 2010, entitled “Reticle Set Modification to ProduceMulti-Core Dies,” and its concurrently filed nonprovisional (CNTR.2528),which are incorporated herein by reference. One example of a lessextensive set of inter-core communication wires is illustrated inCNTR.2534, which is herein incorporated by reference. Sets of inter-corecommunication wires may be as small, in number of included wires, asnecessary to enable coordination activities as described herein.Inter-core communication wires may also be configured, and interfacedbetween cores, in a manner similar to inter-die communication linesdescribed further below.

Furthermore, a package may provide inter-die communication lines betweendies of a package, and a platform may provide inter-packagecommunication lines between packages of the platform. As will beexplained more fully below, implementations of inter-die communicationlines may require at least one additional physical output pad on eachdie. Likewise, implementations of inter-package communication lines mayrequire at least one additional physical output pad on each package.And, as explained further below, some implementations provide additionaloutput pads, beyond a minimally sufficient number of output pads, toenable greater flexibility in coordinating cores. For any of thesevarious possible inter-core communication implementations, it ispreferred that they require no active logic outside of any of the cores.As such, implementations of various embodiments of the present inventionare expected to provide certain advantages, as made apparent herein,over implementations that use an off-core HCL or other active off-corelogic to coordinate cores.

III. Hierarchical Concepts

To reiterate, the present invention describes, but is not—unlessotherwise specified—limited to, several embodiments of multi-coremultiprocessors that provide sideband communication wires and that usesuch wires in preference over the system bus to coordinate cores inorder to implement or enable implementation of certain structured orrestricted activities. In many of these embodiments, these physicalimplementations are used in conjunction with hierarchical coordinationsystems to carry out the desired hardware coordination. Some of thehierarchical coordination systems described herein are very complex. Forexample, FIGS. 1, 9, 11, 12, 14, 15, 16, 18, 19, 20, 21, and 22 depictembodiments of multi-core processors with various hierarchicalcoordination systems that structure and facilitate inter-corecoordination activities such as power-state management. Thisspecification also provides several progressively more abstractcharacterizations of hierarchical coordination systems, as well asexamples of even more elaborate and complex hierarchical coordinationsystems. Therefore, before going into highly specific examples ofinter-core coordination processes used to enable implementation of astructure or restricted activity, it is helpful to explain variousaspects of various hierarchical coordination systems that arecontemplated herein.

As used herein, a hierarchical coordination system refers to one inwhich the cores are configured to coordinate with each other in an atleast partially restricted or structured hierarchical manner for somepertinent or predefined activity or purpose. This is distinguishedherein from an equipotent peer-to-peer coordination system in which eachcore is equally privileged and can directly coordinate with any othercore (and with the chipset) to perform a pertinent activity. Forexample, a nodal tree structure in which the cores coordinate, forcertain restricted activities, solely with superiorly-ranked orinferiorly-ranked nodally connected cores, and for which there is only asingle path between any two nodes, would constitute a strictlyhierarchical coordination system. As used herein, a hierarchicalcoordination system, unless more strictly defined, also encompassescoordination systems that are more loosely hierarchical, such as asystem that permits peer-to-peer coordination within at least one groupof cores but requires hierarchical coordination between at least two ofthe core groups. Examples of both strictly and loosely hierarchicalcoordination systems are presented herein.

In one embodiment, a hierarchical coordination system is provided thatcorresponds to an arrangement of cores in a microprocessor having aplurality of packages, each package having a plurality of dies, and eachdie having a plurality of cores. It is useful to characterize each layeras a “domain.” For example, a dual-core die may be characterized as adomain consisting of its cores, a dual-die package may be characterizedas a domain consisting of its dies, and a dual-package platform ormicroprocessor may be characterized as a domain consisting of itspackages. It is also useful to describe the core itself as a domain.This conceptualization of “domains” is also useful in referring to aresource, such as a cache, a voltage source, or a clock source, that isshared by cores of a domain but that is otherwise local to that domain(i.e., not shared by cores outside of that domain). Of course, thedomain depth and number of constituents per domain (e.g., where a die isa domain, the package is a domain, and so on) applicable to any givenmulti-core processor can vary and be scaled up or down depending on thenumber of cores, their stratification, and the manner in which variousresources are shared by the cores.

It is also useful to name different types of relationships betweendomains. As used herein, all of the enabled physical cores on amulti-core die are considered “constituents” of that die and“co-constituents” of each other. Likewise, all of the enabled physicaldies on a multi-die package are considered constituents of that packageand co-constituents of each other. Also likewise, all of the enabledphysical packages on a multi-package processor would be consideredconstituents of that processor and co-constituents of each other. Again,this representation may be extended to as many levels of domain depth asis provided with the multi-core processor. In general, each non-terminaldomain level is defined by one or more constituents, each of whichcomprises the next lower domain level of the hierarchical structure.

In some multi-core processor embodiments, for each multi-core domain(e.g., for each die, for each package, for each platform, and so on),one and only one core thereof is designated as, and provided with acorresponding functional gate-keeping or coordination role of, a“master” for that domain. For example, a single core of each multi-coredie, if any, is designated as a “die master” of that die, a single coreof each package is designated a “package master” (PM) of that package,and (for a processor so stratified) a single core of each platform isdesignated as “platform master” for that platform, and so on. Generally,the master core of the highest domain of the hierarchy serves as thesole “bus service processor” (BSP) core for the multi-core processor,wherein only the BSP is authorized to coordinate certain types ofactivities with the chipset. It is noted that terms such as “master” areemployed herein for convenience, and that labels other than “master”—forexample, “delegate”—could be applied to describe such functional roles.

Further relationships are defined between each domain master core andthe cores with which it is enabled, for the predefined purposes oractivities for which it is so designated, to directly coordinate. At thelowest domain level (e.g., a die), the die master core of a multi-coredie may be characterized as a “pal” to each of the enabled non-mastercores of that die. Generally, each of the cores of a die ischaracterized as a pal to any of the other cores of the same die. But inan alternative characterization, the pal designation is restricted tosubordinate relationships between die master core and the other cores ofa multi-core die. Applying this alternative characterization to afour-core die, the die master core would have three pals, but each ofthe other cores would be considered as having only a single pal—the diemaster core.

At the next domain level (e.g., a package), the PM core of a package maybe characterized as a “buddy” to each of the other master cores on thesame package. Generally, each of the die master cores of a package ischaracterized as a buddy to each other die master core of the samepackage. But in an alternative characterization, the buddy designationis restricted to subordinate relationships between a package master coreand other master cores of that package. Applying this alternativecharacterization to a four-die package, the PM core would have threepals, but each of the other die master cores would be considered ashaving only a single pal—the PM core. In yet another alternativecharacterization (such as that set forth in FIG. 11), a master core ischaracterized as a “buddy” to each of the other master cores in theprocessor, including master cores on a different package of theprocessor.

At the next domain level (e.g., the platform of a multi-core processorhaving such depth), the BSP (or platform master) core is characterizedas a “chum” to each of the other PM cores of the platform. Generally,each of the PM cores is related as a chum to each other PM core of thesame platform. But in an alternative characterization, the chumdesignation is restricted to subordinate relationships between a BSPpackage master core and other PM cores of a platform. Applying thisalternative characterization to a four-package platform, the BSP corewould have three pals, but each of the other PM cores would beconsidered as having only a single pal—the BSP.

The pal/buddy/chum relationships described above are more generallycharacterized herein as “kinship” relationships. Each “pal” core belongsto one kinship group, each “buddy” core belongs to a higher-levelkinship group, and each “chum” core belongs to a yet higher-levelkinship group. In other words, the various domains of the hierarchicalcoordination system described above define corresponding “kinship”groups (e.g., one or more groups of pals, groups of buddies, and groupsof chums). Moreover, each “pal,” “buddy,” and “chum” core, if any, of aparticular core can be more generally characterized as a “kin” core.

As used herein, the concept of a kinship group is slightly distinct fromthe concept of a domain. As described above, a domain consists of all ofthe cores in its domain. For example, a package domain generallyconsists of all of the cores on the package. A kinship group, bycontrast, generally consists of select constituent cores of thecorresponding domain. A package domain, for instance, would generallydefine a corresponding kinship group consisting only of the master cores(one of which is also a package master core), but not any of the palcores, on the package. Generally, only terminal multi-core domains—i.e.,domains that have no constituent domains—would define a correspondingkinship group that included all of its cores. For example, a dual-coredie would generally define a terminal multi-core domain with acorresponding kinship group that included both of the die's cores. Itwill be noted that it is also convenient to describe each core asdefining its own domain, as each core generally includes resources localto itself, and not shared by other cores, that may be configured byvarious operating states.

It will be appreciated that in the pal/buddy/chum hierarchy describedabove, each core that is not a master core is merely a pal, and belongsto a single kinship group consisting only of cores on the same die.Every die master core belongs, first, to the lowest level kinship groupconsisting of pal cores on the same die and, secondly, to a kinshipgroup consisting of buddy cores on the same package. Every packagemaster core belongs, first, to a lowest level kinship group consistingof pal cores on the same die, secondly, to a kinship group consisting ofbuddy cores on the same package, and thirdly, to a kinship groupconsisting of chum cores on the same platform. In short, each corebelongs to W kinship groups, where W equals the number of kinship groupsfor which that core is a master core, plus 1.

To further characterize of the hierarchical nature of the kinshipgroups, the “closest” or “most immediate” kinship group of any givencore corresponds to the lowest-level multi-core domain of which thatcore is a part. In one example, no matter how many master designations aparticular core has, its most immediate kinship group comprises itspal(s) on the same die. A master core would also have a second closestkinship group comprising the core's buddy or buddies on the samepackage. A package master core would also have a third closest kinshipgroup comprising the core's chum(s).

It is notable that the kinship groups described above will besemi-exclusive for a multi-level multi-core processor (wherein at leasttwo levels Nx have multiple constituents). That is, for such processors,no given kinship group will include all of the cores of that processor.

The kinship group concept described above can be characterized evenfurther by different coordination models a kinship group may employbetween its constitutent cores. As used herein, in a “master-mediated”kinship group, direct coordination between cores is restricted tocoordination between the master core and its non-master cores.Non-master cores within the kinship group cannot directly coordinatewith each other, but only indirectly through the master core. In a“peer-collaborative” kinship group, by contrast, any two cores of thekinship group may directly coordinate with each other, without themaster core's mediation. In a peer-collaborative kinship group, a morefunctionally consistent term for the master would be a “delegate,”because it acts as a coordination gatekeeper only for coordinations withhigher level domains, not for coordinations between the kinship group'speers. It should be noted that the distinction defined herein between a“master-mediated” and “peer-collaborative” kinship group is onlymeaningful for kinship groups having three or more cores. Generally, forcertain predefined activities, any given core can only coordinate withconstituents or co-constituents of its kinship groups, and, with respectto any master-mediated kinship group of which it is a part, only withits superior “co-constituent” or inferior constituents, as applicable.

It is also convenient to describe the hierarchical coordination systemsabove in terms of nodes and nodal connections of a nodal hierarchy. Asused herein, a nodal hierarchy is one in which each node is a unique oneof the cores of the multi-core processor, one of the cores (e.g., theBSP core) is the root node, and there is an unbroken coordination “path”(including intermediate nodes, if applicable) between any two nodes.Each node is “nodally connected” to at least one other node, but not allof the other nodes, and can only coordinate, for purposes of activitiesto which the coordination system applies, with “nodally connected”cores. To further differentiate these nodal connections, a master core'ssubordinate nodally connected cores are described herein as“constituent” cores and alternatively as “subordinate kin” cores, whichare distinguished from a core's nodally connected “co-constituentcores,” which are nodally connected cores that are not subordinate toitself. Further clarifying, a core's nodally connected “co-constituent”cores consist of its master core, if any, and any equally ranked coresto which it is nodally connected (e.g., in a peer-coordinated kinshipgroup of which the core is a part). Also, any cores that have nosubordinate kin cores are also referred to herein as “terminal” nodes or“terminal” cores.

Up until this point, hierarchical coordination systems have beendescribed, for purposes of clarity, in which the domains correspond to aphysically distinct nested arrangements of cores (e.g., a distinctdomain corresponds to each applicable core, die, package, and platform).FIGS. 1, 9, 12, 16, and 22, for example, all illustrate hierarchicalcoordination systems that correspond with the physically distinct nestedpackages of cores illustrated in the processor. FIG. 22 is aninteresting consistent example. It illustrates an octacore processor2202 with asymmetric packages, one of which has three dual-core dies andthe other of which has a single-core die. Nevertheless, consistent withthe physically distinct nested manner in which the cores are packaged,sideband wires are provided that define a corresponding three-levelhierarchical coordination system, with package masters related as chums,die masters related as buddies, and die cores related as pals.

But, depending on the configuration of the inter-core, inter-die, andinter-package sideband wires, if any, of a processor, hierarchicalcoordination systems between cores may be established that have adifferent depth and stratification than the nested physical arrangementsin the processor's cores are packaged. Several such examples areprovided in FIGS. 11, 14, 15, and 21. FIG. 11 illustrates an octa-coreprocessor having two packages, with two dies per package, and two coresper die. In FIG. 11, sideband wires facilitating a two-levelhierarchical coordination system are provided, so that all of the mastercores may be part of the highest-level kinship group, and each mastercore also belongs to a distinct lowest-level kinship group comprisingitself and its pals. FIG. 14 illustrates an octa-core processor havingfour dual-core dies on a single package. In FIG. 14, sideband wiresrequiring a three-level hierarchical coordination system of pals,buddies, and chums are provided. FIG. 15 illustrates a processor withtwo quad-core dies where inter-core wires within each die require atwo-level hierarchical coordination system between them, and inter-diewires providing a third hierarchical level of coordination are providedbetween the masters (i.e., chums) of each die. FIG. 21 illustratesanother octacore processor that, like FIG. 22, has two asymmetricpackages, one of which has three dual core dies and the other of whichhas a single dual core die. But, like FIG. 11, inter-die andinter-package sideband wires are provided that facilitate a two-levelhierarchical coordination system between the cores, will all of themaster cores on both packages being part of the same kinship group.

As explained above, hierarchical coordination systems of differentdepths and coordination models can be applied as desired or asapplicable to the distribution of shared resources provided for amulti-core processor, provided it is consistent with the structuralcapabilities and constraints of the multi-core processor. To furtherillustrate, FIG. 16 shows a processor that provides sufficient sidebandcommunication wires to facilitate a peer-collaborative coordinationmodel between all of the cores of each quad-core die. In FIG. 17,however, a more-restrictive, master-mediated coordination model isestablished for the cores of each quad-core die. Moreover, asillustrated in FIG. 15, a multi-level coordination hierarchy, with twopal kinship groups and one master kinship group, could also, if desired,be established for the cores of FIG. 16's quad-core microprocessor,simply by using less (for purposes of activities to which thecoordination system applies) than all of the available inter-core wires.Because each quad-core die in FIG. 16 provides sideband wires betweeneach of its cores, the die is capable of facilitating all three types ofhierarchical coordination systems.

Generally, regardless of the nature and number of domains, kinshipgroups, and nodes of a multi-core processor, one and only one of thecores of each domain and each corresponding kinship group will bedesignated as the master of that domain and corresponding kinship group.Domains may have constituent domains, and again, one and only of thecores of each domain and corresponding kinship group will be designatedas the master of that domain. The highest ranking core of thecoordination system is also referred to as a “root node.”

IV. Power State Management

Having introduced various concepts related to multi-core configurations,sideband communication capabilities, and hierarchical relationships,this specification now introduces some concepts related to specificcontemplated embodiments of power state management systems. It should beappreciated, however, that the present invention is applicable tocoordination of a wide variety of activities besides power statemanagement.

In the distributed multi-core power management embodiments describedherein, each core of the multi-core processor includes decentralized anddistributed scalable power management logic, duplicated in one or moremicrocode routines resident on each core. The power management logic isoperable to receive a target power state, ascertain whether it is arestricted power state, initiate a composite power state discoveryprocess that includes inter-core coordination, and respondappropriately.

Generally, a target state is any requested or desired one of a class ofpredefined operating states (such as C-states, P-states, voltage ID(VID) value, or clock ratio value). Generally, a predefined group ofoperating states defines comprises a plurality of processor operatingstates orderable on the basis of one or more power, voltage, frequency,performance, operating, responsiveness, shared resource, or restrictedimplementation characteristics. The operating states may be provided tooptimally manage power, relative to other desired operatingcharacteristics, of a processor.

In one embodiment, the predefined operating states include an activeoperating state (such as the C0 state) and a plurality of progressivelyless active or responsive states (such as the C1, C2, C3, etc. states).As used herein, a progressively less responsive or active state refersto a configuration or operating state that saves power, relative to amore active or responsive state, or is somehow relatively lessresponsive (e.g., slower, less fully enabled, subject to some kind ofimpediment such as accessing resources such as cache memories, orsleepier and harder to wake up). In some embodiments, the predefinedoperating states constitute, but are not necessarily limited to,C-states or sleep states based on, derived from, or compliant with theACPI specification. In other embodiments, predefined operating statesconstitute, or include, various voltage and frequency states (e.g.,progressively lower voltage and/or lower frequency states), or both.Further, a set of predefined operating states may comprise or includevarious programmable operating configurations, such as forcinginstructions to be executed in program order, forcing only oneinstruction to be issued per clock cycle, formatting only a singleinstruction per clock cycle, translating only a single microinstructionper clock cycle, retiring only a single instruction per clock cycle,and/or accessing various cache memories in a serial fashion, usingtechniques such as those described in U.S. Ser. No. 61/469,515, filedMar. 30, 2011, entitled “Running State Power Saving Via ReducedInstructions Per Clock Operation” (CNTR.2550), which is hereinincorporated by reference.

It will be understood that a microprocessor may be configurable inaccordance with different, and independent or partially independent,predefined sets of operating states. Various operating configurationsthat affect power consumption, performance, and/or responsiveness, canbe assigned to different classes of power states, each class of whichmay be implemented independently in accordance with a correspondinghierarchical coordination system, each having its own independentlydefined domains, domain masters, and kinship group coordination models.

Generally, a class of predefined operating states can be broken up intoat least two categories: (1) predominantly local operating states thataffect only resources local to the core or that, with respect to commonpractical applications, predominately only affect the performance of thespecific core, and (2) restricted operating states that impact one ormore resources shared by other cores or that, with respect to commonpractical applications, are relatively more likely to interfere with theperformance of other cores. Operating states that impact sharedresources are associated with a relatively greater probability ofinterfering with the power, performance, efficiency, or responsivenessof other cores sharing that resource. Implementation of predominantlylocal operating states generally does not merit coordination with, orprior permission from, other cores. Implementation of restrictedoperating states, by contrast, merits coordination with, and readinessby, other cores.

In more advanced embodiments, predefined operating states can be brokenup into more hierarchical categories, depending on how and the extent towhich various resources are shared. For instance, a first set ofoperating states may define configurations of resources local to a core,a second set of one operating states may define configurations ofresources shared by cores of a die but that are otherwise local to thatdie, a third set of operating states may define configurations ofresources shared by cores of a package, and so on. Implementation of anoperating state merits coordination with, and readiness by, the allother cores sharing a resource configured by the applicable operatingstate.

Generally, a composite operating state, for any given domain, is anextremum (i.e., maximum or minimum) of the applicable operating state ofeach enabled physical core belonging to that domain. In one embodiment,a physical core's applicable operating state is the core's most recentand still valid target or requested operating state, if any, or, if thecore does not have a most recent valid target or requested operatingstate, some default value. The default value may be zero (e.g., wherethe composite operating state is calculated as a minimum), the maximumof the predefined operating states (e.g., where the composite operatingstate is calculated as a maximum), or the core's currently implementedoperating state. In one example, a core's applicable operating state isa power or operating state, such as a voltage ID (VID) or clock ratiovalue, desired or requested by the core. In another example, a core'sapplicable operating state is the most recent valid C-state the core hasreceived from applicable system software.

In another embodiment, a physical core's applicable operating state isan extremum of the core's most recent and still valid target orrequested operating state, if any, and the most extreme operating statethat would affect resources local to the highest domain, if any, forwhich the core has master credentials.

Accordingly, the composite operating state for the processor as a wholewould be the maximum or minimum of the applicable power states of all ofthe enabled physical cores of that processor. A composite power state ofa package would be the maximum or minimum of the applicable power statesof all of the enabled physical cores of that package. A composite powerstate of a die would be the maximum or minimum of the applicable powerstates of all of the enabled physical cores of that die.

In the decentralized power state management embodiments describedherein, a portion or routine of each core's power management logic issynchronization logic that is configured, at least conditionally, toexchange power state information with other nodally connected cores(i.e., other cores of a common kinship group) to determine a compoundpower state. A compound power state is an extremum of at least theapplicable power states of the cores corresponding to the native and atleast one nodally-linked instance of the synchronization logic. Undersome but not necessarily all circumstances, a compound power statecalculated and returned by a synchronization routine will correspondexactly to a composite power state for an applicable domain.

Each invoked instance of synchronization logic is configured to at leastconditionally induce dependent instances of synchronization logic innot-yet-synched nodally-connected cores, starting with nodally-connectedcores of the most immediate kinship group and proceeding tonodally-connected cores of progressively higher-level kinship groups, ifany, to which the core on which the instance of synchronization logicbelongs. Not-yet synched nodally connected cores are cores that arenodally connected to itself for which a synchronized instance of thesynchronization logic has not yet been invoked, as part of a compositepower state discovery process.

This discovery process progresses with each instance of synchronizationlogic recursively inducing (at least conditionally) yet furtherdependent instances of the synchronization logic on not yet-synchednodally distal cores until there are synchronized instances of thesynchronization logic running on each of the cores of the applicablepotentially impacted domain. Upon discovery of a composite power statefor the applicable domain, an instance of power management logic runningon a core, designated as being authorized to enable or carry outimplementation of the composite power state for that domain, enablesand/or carries out the implementation.

V. Specific Illustrated Embodiments

Attention is now turned to the specific embodiments illustrated in theFigures.

In one embodiment, each instance of synchronization logic communicateswith synchronized instances of the logic on other cores via sidebandcommunication or bypass bus wires (the inter-core communication wires112, inter-die communication wires 118, and inter-package communicationwires 1133), which are distinct from the system bus, to perform thepower management in a decentralized, distributed fashion. This allowsthe cores to be physically located on multiple dies or even on multiplepackages, thereby potentially reducing die size and improving yields andproviding a high degree of scalability of the number of cores in thesystem without putting undue pressure on the pad and pin limitations ofmodern microprocessor dies and packages.

Referring now to FIG. 1, a block diagram illustrating an embodiment of acomputer system 100 that performs decentralized power managementdistributed among multiple processing cores 106 of a multi-coremicroprocessor 102 according to the present invention is shown. Thesystem 100 includes a single chipset 114 coupled to the multi-coremicroprocessor 102 by a system bus 116. The multi-core microprocessor102 package includes two dual-core dies 104, denoted die 0 and die 1.The dies 104 are mounted on a substrate of the package. The substrateincludes wire nets (or simply “wires”), or traces, which connect pads ofthe dies 104 to pins of the package 102. The pins may be connected tothe bus 116, among other things. The substrate wires also includeinter-die communication wires 118 (discussed more below) thatinterconnect the dies 104 to facilitate communication between them toperform the decentralized power management distributed among the cores106 of the multi-core microprocessor 102.

Each of the dual-core dies 104 includes two processing cores 106. Die 0includes core 0 and core 1, and die 1 includes core 2 and core 3. Eachdie 104 has a designated master core 106. In the embodiment of FIG. 1,core 0 is the master core 106 of die 0, and core 2 is the master core106 of die 1. In one embodiment, each core 106 includes configurationfuses. The manufacturer of the die 104 may blow the configuration fusesto designate which of the cores 106 is the master core of the die 104.Additionally, the manufacturer of the die 104 may blow the configurationfuses to designate to each core 106 its instance, i.e., whether the core106 is core 0, core 1, core 2, or core 3. As discussed above, the term“pal” is used to refer to cores 106 on the same die 104 that communicatewith one another; thus, in the embodiment of FIG. 1, core 0 and core 1are pals, and core 2 and core 3 are pals. The term “buddy” is usedherein to refer to master cores 106 on different dies 104 thatcommunicate with one another; thus, in the embodiment of FIG. 1, core 0and core 2 are buddies. According to one embodiment, the even-numberedcore 106 is the master core of each die 104. According to oneembodiment, core 0 is designated the boot service processor (BSP) of themulti-core microprocessor 102. It alone is authorized to coordinatecertain restricted activities with the chipset 114, including enableimplementation of certain composite power states. According to oneembodiment, the BSP core 106 informs the chipset 114 that it may requestpermission to remove the bus 116 clock to reduce power consumptionand/or refrain from generating snoop cycles on the bus 116, as discussedbelow with respect to block 322 of FIG. 3. In one embodiment, the BSP isthe core 106 whose bus request output is coupled to the BREQ0 signal onthe bus 116.

The two cores 106 within each die 104 communicate via inter-corecommunication wires 112 that are internal to the die 104. Morespecifically, the inter-core communication wires 112 enable the cores106 within a die 104 to interrupt one another and to send one anothermessages to perform the decentralized power management distributed amongthe cores 106 of the multi-core microprocessor 102. In one embodiment,the inter-core communication wires 112 comprise parallel buses. In oneembodiment, the inter-core communication wires 112 are similar to thosedescribed in CNTR.2528.

Additionally, the cores 106 communicate via the inter-die communicationwires 118. More specifically, the inter-die communication wires 118enable the master cores 106 on distinct dies 104 to interrupt oneanother and to send one another messages to perform the decentralizedpower management distributed among the cores 106 of the multi-coremicroprocessor 102. In one embodiment, the inter-die communication wires118 run at the bus 116 clock rate. In one embodiment, the cores 106transmit 32-bit messages to one another. The transmitting, orbroadcasting, core 106 asserts its single-wire inter-die communicationwire 118 for one bus 116 clock to indicate it is about to transmit amessage, and then sends a sequence of 31 bits on the next respective 31bus 116 clocks. At the end of each inter-die communication wire 118 is a32-bit shift register that accumulates the single bits as they arereceived into the 32-bit messages. In one embodiment, the 32-bit messagecomprises a plurality of fields. One field specifies a 7-bit requestedVID value used according to the shared VRM distributed managementmechanism described in CNTR.2534. Other fields include messages relatedto power state (e.g., C-state) synchronization, such as C-state requestvalues and acknowledgements, which are exchanged between the cores 106as discussed herein. Additionally, a special message value enables atransmitting core 106 to interrupt a receiving core 106.

In the embodiment of FIG. 1, each die 104 includes four pads 108 coupledto four respective pins, denoted “P1”, “P2”, “P3”, and “P4”. Of the fourpads 108, one is an output pad (denoted “OUT”) and three are input pads(denoted IN 1, IN 2, and IN 3). The inter-die communication wires 118are configured as follows. The OUT pad of die 0 and the IN 1 pad of die1 are coupled to pin P1 via a single wire net; the OUT pad of die 1 andthe IN 3 pad of die 0 are coupled to pin P2 via a single wire net; theIN 2 pad of die 0 and the IN 3 pad of die 1 are coupled to pin P3 via asingle wire net; and the IN 1 pad of die 0 and the IN 2 pad of die 1 arecoupled to pin P4 via a single wire net. In one embodiment, the core 106includes an identifier in each message it transmits out of its OUT pad108 on its inter-die communication wire 118 (or inter-packagecommunication wires 1133 described below with respect to FIG. 11). Theidentifier uniquely identifies the destination core 106 to which themessage is destined, which is useful in embodiments described herein inwhich the message is broadcast to multiple recipient cores 106. In oneembodiment, each die 104 is assigned one of the four pads 108 as itsoutput pad (OUT) based on a configuration fuse blown duringmanufacturing of the multi-core microprocessor 102.

When master core 0 of die 0 wants to communicate with master core 2 ofdie 1, it transmits information on its OUT pad to the IN 1 pad of die 1;similarly, when master core 2 of die 1 wants to communicate with mastercore 0 of die 0, it transmits information on its OUT pad to the IN 3 padof die 0. Thus, in the embodiment of FIG. 1, only one input pad 108 perdie 104 is needed rather than three. However, an advantage ofmanufacturing the dies 104 with three input pads 108 is that it enablesthe same dies 104 to be configured in both a quad-core multi-coremicroprocessor 102 of FIG. 1 and an octa-core multi-core microprocessor902, such as shown in FIG. 9. Additionally, in the embodiment of FIG. 1,two of the pins P are not needed. However, an advantage of manufacturingthe dies 104 with four pins P is that it enables the same quad-coremicroprocessor 102 to be configured in both a single quad-coremicroprocessor 102 of FIG. 1 and in an octa-core system 1100, such asshown in FIG. 11, having two quad-core microprocessors 1102.Nevertheless, quad-core embodiments are contemplated in which the unusedpins P and pads 108 may be removed to reduce pad and pin count whennecessary, such as shown in the embodiments of FIGS. 12 and 14 through16. Additionally, dual-core embodiments, such as shown in theembodiments of FIGS. 19 and 20, are contemplated in which the unusedpins P and pads 108 may be removed to reduce pad and pin count, orallocated for another purpose, when necessary.

According to one embodiment, the bus 116 includes signals that enablethe chipset 114 and multi-core microprocessor 102 to communicate via abus protocol similar to the well-known Pentium 4 bus protocol. The bus116 includes a bus clock signal supplied by the chipset 114 to themulti-core microprocessor 102 which the cores 106 use to generate theirinternal core clock signals, whose frequencies are typically a ratio ofthe bus block frequency. The bus 116 also includes a STPCLK signal whichthe chipset 114 asserts to request permission from the cores 106 toremove the bus clock signal, i.e., permission to stop providing the busclock signal. The multi-core microprocessor 102 indicates to the chipset114 that it may assert STPCLK by performing an I/O Read transaction onthe bus 116 from a predetermined I/O port address, which only one of thecores 106 performs. As discussed below, advantageously, the multiplecores 106 communicate with one another via the inter-core communicationwires 112 and the inter-die communication wires 118 to determine whenthe single core 106 can perform the I/O Read transaction. After thechipset 114 asserts STPCLK, according to one embodiment, each of thecores 106 issues a STOP GRANT message to the chipset 114; once each core106 has issued a STOP GRANT message, the chipset 114 may remove the busclock. In another embodiment, the chipset 114 has a configuration optionsuch that it expects only a single STOP GRANT message from themulti-core microprocessor 102 before it removes the bus clock.

Referring now to FIG. 2, a block diagram illustrating in detail arepresentative one of the cores 106 of FIG. 1 according to the presentinvention is shown. According to one embodiment, the core 106microarchitecture comprises a superscalar, out-of-order executionpipeline of functional units. An instruction cache 202 cachesinstructions fetched from a system memory (not shown). An instructiontranslator 204 is coupled to receive instructions, such as x86instruction set architecture instructions, from the instruction cache202. A register alias table (RAT) 212 is coupled to receive translatedmicroinstructions from the instruction translator 204 and from amicrosequencer 206 and to generate dependency information for thetranslated microinstructions. Reservation stations 214 are coupled toreceive the translated microinstructions and dependency information fromthe RAT 212. Execution units 216 are coupled to receive the translatedmicroinstructions from the reservation stations 214 and to receiveinstruction operands for the translated microinstructions. The operandsmay come from registers of the core 106, such as general purposeregisters and readable and writeable model-specific registers (MSR) 238,and from a data cache 222 coupled to the execution units 216. A retireunit 218 is coupled to receive instruction results from the executionunits 216 and to retire the results to architectural state of the core106. The data cache 222 is coupled to a bus interface unit (BIU) 224that interfaces the core 106 to the bus 116 of FIG. 1. Aphase-locked-loop (PLL) 226 receives the bus clock signal from the bus116 and from it generates a core clock signal 242 to the variousfunctional units of the core 106. The PLL 226 may be controlled, such asdisabled, via the execution units 216.

The execution units 216 receive a BSP indicator 228 and a masterindicator 232 that indicate whether the core 106 is the master core ofthe die 104 and the BSP core of the multi-core microprocessor 102,respectively. As discussed above, the BSP indicator 228 and masterindicator 232 may comprise programmable fuses. In one embodiment, theBSP indicator 228 and master indicator 232 are stored in a modelspecific register (MSR) 238 that is initially populated with theprogrammable fuse values, but which may be updated by software writes tothe MSR 238. The execution units 216 also read and write control andstatus registers (CSR) 234 and 236 to communicate with the other cores106. In particular, the core 106 uses the CSR 236 to communicate withcores 106 on the same die 104 via the inter-core communication wires112, and the core 106 uses the CSR 234 to communicate with cores 106 onother dies 104 via the inter-die communication wires 118 through thepads 108, as described in detail below.

The microsequencer 206 includes a microcode memory 207 configured tostore microcode, including power management logic microcode 208. Forpurposes of the present disclosure, the term “microcode” used hereinrefers to instructions that are executed by the same core 106 thatexecutes the architectural instruction (e.g., the MWAIT instruction)that instructs the core 106 to transition to a power management-relatedstate, referred to herein as a sleeping state, idle state, C-state, orpower state. That is, the instance of a state transition instruction isspecific to the core 106, and the microcode 208 executed in response tothe state transition instruction instance executes on that core 106. Theprocessing cores 106 are symmetric in that they each have the sameinstruction set architecture and are configured to execute user programscomprising instructions from the instruction set architecture. Inaddition to the cores 106, the multi-core microprocessor 102 may includean adjunct or service processor (not shown) that does not have the sameinstruction set architecture as the cores 106. However, according to thepresent invention, the cores 106 themselves, rather than the adjunct orservice processors and rather than any other non-core logic device,perform the decentralized power management distributed among multipleprocessing cores 106 of the multi-core microprocessor 102 in response tothe state transition instructions, which may advantageously provideenhanced scalability, configurability, yield properties, powerreduction, and/or die real estate reduction over a design havingdedicated hardware for performing the power management on behalf of thecores.

The power management logic microcode 208 instructions are invoked inresponse to at least two conditions. First, the power management logicmicrocode 208 may be invoked to implement an instruction of theinstruction set architecture of the core 106. In one embodiment, the x86MWAIT and IN instructions, among others, are implemented in microcode208. That is, when the instruction translator 204 encounters an x86MWAIT or IN instruction, the instruction translator 204 stops fetchingthe currently running user program instructions and transfers control tothe microsequencer 206 to begin fetching a routine in the powermanagement logic microcode 208 that implements the x86 MWAIT or INinstruction. Second, the power management logic microcode 208 may beinvoked in response to an interrupting event. That is, when aninterrupting event occurs, the core 106 stops fetching the current userprogram instructions and transfers control to the microsequencer 206 tobegin fetching a routine in the power management logic microcode 208that handles the interrupting event. Interrupting events includearchitectural interrupts, exceptions, faults, or traps, such as thosedefined by the x86 instruction set architecture. An example of aninterrupting event is detection of an I/O Read transaction on the bus116 to one of a number of predetermined I/O addresses associated withpower management. Interrupting events also include non-architecturallydefined events. In one embodiment, non-architecturally definedinterrupting events include: an inter-core interrupt request (such asdescribed in connection with FIGS. 5 and 6) signaled via inter-corecommunication wires 118 of FIG. 1 or signaled via inter-diecommunication wires 118 of FIG. 1 (or signaled via inter-packagecommunication wires 1133 of FIG. 11, discussed below); and detection ofa STPCLK assertion or deassertion by the chipset. In one embodiment, thepower management logic microcode 208 instructions are instructions ofthe micro-architectural instruction set of the core 106. In anotherembodiment, the microcode 208 instructions are instructions of adifferent instruction set, which get translated into instructions of themicro-architectural instruction set of the core 106.

The system 100 of FIG. 1 performs decentralized power managementdistributed among the multiple processing cores 106. More specifically,each core invokes its native power management logic microcode 208 torespond to a state transition request to transition to a target powerstate. A target power state is any requested one of a plurality ofpredefined power states (such as C-states). The predefined power statesinclude a reference or active operating state (such as ACPI's C0 state)and a plurality of progressively and relatively less responsive states(such as ACPI's C1, C2, C3, etc. states).

Referring now to FIG. 3, a flowchart illustrating operation of thesystem 100 of FIG. 1 to perform decentralized power managementdistributed among the multiple processing cores 106 of the multi-coremicroprocessor 102 according to the present invention is shown.Specifically, the flowchart illustrates operation of a portion of thepower management logic microcode 208 in response to encountering anMWAIT instruction or similar command, to transition to a new powerstate. More specifically, the portion of the power management logicmicrocode 208 illustrated in FIG. 3 is a state transition requesthandling logic (STRHL) routine of the power management logic.

To facilitate a better appreciation of FIG. 3, aspects of the MWAITinstruction and C-state architecture are explained before describingeach of FIG. 3's individual blocks. The MWAIT instruction may beincluded in the operating system (e.g., Windows®, Linux®, MacOS®) orother system software. For example, if the system software knows thatthe workload on the system is presently low or non-existent, the systemsoftware may execute an MWAIT instruction to allow the core 106 to entera low power state until an event, such as an interrupt from a peripheraldevice, requires servicing by the core 106. For another example, thesoftware executing on the core 106 may be sharing data with softwareexecuting on another core 106 such that synchronization, e.g., via asemaphore, is required between accesses to the data shared by the twocores 106; if it is possible that a significant amount of time may passbefore the other core 106 performs the store to the semaphore, thesoftware executing on the instant core 106 may enable the instant core106, via the MWAIT instruction, to enter the low power state until thestore to the semaphore occurs.

The MWAIT instruction is described in detail on pages 3-761 through3-764 of the Intel® 64 and IA-32 Architectures Software Developer'sManual, Volume 2A: Instruction Set Reference, A-M, March 2009, and theMONITOR instruction is described in detail on pages 3-637 through 3-639of the same, which are hereby incorporated by reference in theirentirety for all purposes.

The MWAIT instruction may specify a target C-state. According to oneembodiment, C-state 0 is a running state, and C-states greater than 0are sleeping states; C-states 1 and higher are halt states in which thecore 106 ceases to fetch and execute instructions; and C-states 2 andhigher are states in which the core 106 may perform additional actionsto reduce its power consumption, such as disabling it cache memories andlowering its voltage and/or frequency.

According to one embodiment, C-states of 2 or higher are considered andpredetermined to be a restricted power state. In C-state 2 or higher,the chipset 114 may remove the bus 116 clock, thereby effectivelydisabling the core 106 clocks, in order to greatly reduce powerconsumption by the cores 106. With each succeeding higher C-state, thecore 106 is allowed to perform more aggressive power saving actions thatrequire respectively longer times from which to recover to the runningstate. Examples of the events that may cause the core 106 to exit thelow power state are an interrupt and a store by another processor to anaddress range specified by a previously executed MONITOR instruction.

Notably, the ACPI numbering scheme for C-states uses higher C numbers torepresent progressively less responsive, deeper sleep states. Using sucha numbering scheme, the composite power state of any given constituencygroup (i.e., a die, a package, a platform) would be the minimum of theapplicable C-states of all of the enabled cores of that constituencygroup, where each core's applicable C-state is its most recent validrequested C-state, if any, and zero, if the core does not have a validmost recent valid requested C-state.

However, other classes of power states use progressively higher numbersto represent progressively more responsive states. For example,CNTR.2534 describes a coordination system for indicating a desiredvoltage identifier (VID) to a voltage regulator module (VRM). HigherVIDs correspond to higher voltage levels, which in turn correspond tofaster (and therefore more responsive) performance states. Butcoordinating a composite VID involves determining the maximum of thecores' requested VID values. Because a power state numbering scheme canbe specified in either ascending or descending order, portions of thisspecification define composite power states as an “extremum,” which iseither the minimum or the maximum, of the applicable power states of therelevant cores. However, it will be appreciated that even requested VIDand clock ratio values are “orderable” (using, for example, thenegatives of the original values) in a direction opposite to theirconventional order; thus even more particularly defined hierarchicalcoordination systems herein are generally applicable to power statesregardless of their conventionally defined direction.

Although FIG. 3 describes an embodiment in which the cores 106 respondto an MWAIT instruction to perform the decentralized power management,the cores 106 may also respond to other forms of input that instruct thecore 106 that it may enter a low power state. For example, the businterface unit 224 may generate a signal to cause the core 106 to trapto the microcode 208 in response to detecting an I/O read transaction onthe bus 116 to a predetermined I/O port range. Furthermore, embodimentsare contemplated in which the core 106 traps to the microcode 208 inresponse to other external signals received by the core 106, and are notlimited to x86 instruction set architecture embodiments or toembodiments of systems that include a Pentium 4-style processor bus.Furthermore, a core 106's given target state may be internallygenerated, as is frequently the case with desired voltage and clockvalues.

Focusing now on the individual functional blocks of FIG. 3, flow beginsat block 302. At block 302, the instruction translator 204 of FIG. 2encounters an MWAIT instruction and traps to the power management logicmicrocode 208, and more specifically to the STRHL routine, thatimplements the MWAIT instruction. The MWAIT instruction specifies atarget C-state, denoted “X,” and instructs the core 106 that it mayenter an optimized state while waiting for an event to occur.Specifically, the optimized state may be a low power state in which thecore 106 consumes less power than the running state in which the core106 encounters the MWAIT instruction.

Flow proceeds to block 303. The microcode store “X” as the core'sapplicable or most recent valid requested power state, denoted as “Y.”It is noted that if the core 106 has not encountered an MWAITinstruction, or if since that time that instruction has been supercededor become stale (by, for example, a subsequent STPCLK deassertion) andthe core is in a normal running state, the value “Y” stored as thecore's applicable or most recent valid requested power state is 0.

Flow proceeds to block 304. At block 304, the microcode 208, and morespecifically the STRHL routine, examines “X,” a value corresponding tothe target C-state. If “X” is less than 2 (i.e., the target C-state is1), flow proceeds to block 306; whereas, if the target C-state isgreater than or equal to 2 (i.e., “X” corresponds to a restricted powerstate), flow proceeds to block 308. At block 306, the microcode 208 putsthe core 106 to sleep. That is, the STRHL routine of microcode 208writes control registers within the core 106 to cause it to ceasefetching and executing instructions. Thus, the core 106 consumes lesspower than when it is in a running state. Preferably, when the core 106is sleeping, the microsequencer 206 also does not fetch and executemicrocode 208 instructions. Flow ends at block 306. FIG. 5 describesoperation of the core 106 in response to being awaken from sleep.

Block 308 represents a path the STRHL routine of microcode 208 takes if“X” is 2 or more, corresponding to a restricted power state. Asexplained above, in one embodiment, a C-state of 2 or more involvesremoving the bus 116 clock. The bus 116 clock is a resource shared bythe cores 106. Therefore, when a core is provided with a target C-stateof 2 or higher, the cores 106 advantageously communicate in adistributed and coordinated fashion as described herein to verify thateach core 106 has been instructed that it may transition to a C-state of2 or greater before communicating to the chipset 114 that it may removethe bus 116 clock.

In block 308, the STRHL routine of microcode 208 performs relevant powersavings actions (PSA) based on the target C-state specified by the MWAITinstruction encountered at block 302. Generally, the PSA taken by thecore 106 include actions that are independent of the other cores 106.For example, each core 106 includes its own cache memories that arelocal to the core 106 itself (e.g., instruction cache 202 and data cache222), and the PSA include flushing the local caches, removing theirclocks, and powering them down. In another embodiment, the multi-coremicroprocessor 102 may also include caches shared by multiple cores 106.In this embodiment, the shared caches cannot be flushed, have theirclocks removed, or powered down until the cores 106 communicate with oneanother to determine that all the cores 106 have received an MWAITspecifying an appropriate target C-state, in which case they may flushthe shared caches, remove their clocks, and power them down prior toinforming the chipset 114 that it may request permission to remove thebus 116 clock and/or refrain from generating snoop cycles on the bus 116(see block 322). In one embodiment, the cores 106 share a voltageregulator module (VRM). CNTR.2534 describes an apparatus and method formanaging a VRM shared by multiple cores in a distributed, decentralizedfashion. In one embodiment, each core 106 has its own PLL 226, as in theembodiment of FIG. 2, such that the core 106 can reduce its frequency ordisable the PLL 226 to save power without affecting the other cores 106.However, in other embodiments, the cores 106 on a die 104 may share aPLL. CNTR.2534 describes one apparatus and method for managing a PLLshared by multiple cores in a distributed, decentralized fashion.Embodiments of power state management and associated synchronizationlogic described herein may also (or alternatively) be applied to managea PLL shared by multiple cores in a distributed, decentralized fashion.

Flow proceeds to block 312. At block 312, the STRHL routine of the powerstate management microcode 208 calls another power state managementmicrocode 208 routine denoted sync_cstate, which is described in detailwith respect to FIG. 4, to communicate with the other nodally connectedcores 106 and obtain a composite C-state for the multi-coremicroprocessor 102, denoted Z in FIG. 3. Each invoked instance of thesync_cstate routine is referred to herein as a “native” instance of thesync_cstate routine with respect to the core on which it is running.

The STRHL routine of microcode 208 invokes the sync_cstate routine withan input parameter or probe power state value equal to the core'sapplicable power state, i.e., its most recent valid requested targetpower state, which is the value of “X” received at block 302 that wasspecified by the MWAIT instruction. Invoking the sync_cstate routinestarts a composite power state discovery process, as described furtherin connection with FIG. 4.

Each invoked sync_cstate routine calculates and returns to any processthat calls or invokes it (here, the STRHL routine) a “compound” C-state.The “compound” C-state is the minimum of the probe C-state value itreceived from the invoking process, the applicable C-state of the coreon which the sync_cstate routine is running, and any compound C-statesit received from any dependently induced instances of the sync_cstateroutine. Under some circumstances, described below, the compound C-stateis the composite power state of the domain common to both the nativesync_cstate routine and the synchronized sync_cstate routine from whichit depends. In other circumstances, described below, the compoundC-state may only be a partial composite C-state of the domain.

In general, a composite power state of a domain is an extremum (in theACPI power-state scheme, the minimum value) of the applicable powerstates of all of the cores of that domain. For example, the compositeC-state of a die 104 is the minimum value of the applicable C-states(e.g., the most recent valid requested C-states, if all cores have suchvalues) of all of the cores 106 of the die. The composite C-state forthe multi-core microprocessor 102 as a whole is the minimum value of theapplicable C-states of all of the cores 106 of the multi-coremicroprocessor 102.

A compound power state, however, may be either a composite power statefor an applicable domain, or just a partial composite power state. Apartial composite power state would be an extremum of the applicablepower states of two or more, but less than all, of the cores of anapplicable domain. In parts, this specification refers to an “at leastpartial composite power state” to encompass calculated compound powerstates of either variety. The potential, albeit subtle, distinctionbetween a compound power state and a composite power state will becomemore apparent in connection with FIGS. 4C, 10 and 17.

It is noted, in advance, that a non-zero value composite C-state for amulti-core microprocessor 102 indicates that every core 106 has seen anMWAIT that specifies a non-running C-state, i.e., a C-state with a valueof 1 or greater; whereas a zero value composite C-state indicates thatnot every core 106 has seen an MWAIT. Furthermore, a value of greaterthan or equal to 2 indicates that all the cores 106 of the multi-coremicroprocessor 102 have received an MWAIT instruction specifying aC-state of 2 or greater.

Flow proceeds to decision block 314. At decision block 314, the STRHLroutine of the microcode 208 examines the compound C-state “Z”determined at block 312. If “Z” is greater than or equal to 2, then flowproceeds to decision block 318. Otherwise, flow proceeds to block 316.

At block 316, the STRHL routine of the microcode 208 puts the core 106to sleep. Flow ends at block 316.

At decision block 318, the STRHL routine of the microcode 208 determineswhether the core 106 is the BSP. If so, flow proceeds to block 322;otherwise, flow proceeds to block 324.

At block 322, the BSP 106 informs the chipset 114 that it may requestpermission to remove the bus 116 clock and/or refrain from generatingsnoop cycles on the bus 116.

In one embodiment, according to the well-known Pentium 4 bus protocol,the BSP 106, which is uniquely authorized to enable higherpower-management states, informs the chipset 114 that it may requestpermission to remove the bus 116 clock and/or refrain from generatingsnoop cycles on the bus 116 by initiating an I/O read transaction on thebus 116 to a predetermined I/O port. Thereafter, the chipset 114 assertsthe STPCLK signal on the bus 116 to request permission to remove the bus116 clock. In one embodiment, after informing the chipset 114 that itcan assert STPCLK at block 322 (or block 608), the STRHL routine of themicrocode 208 running on the BSP core 106 waits for the chipset 114 toassert STPCLK, rather than going to sleep (at block 324 or block 614),and then notifies the other cores 106 of the STPCLK assertion, issuesits STOP GRANT message, and then goes to sleep. Depending upon thepredetermined I/O port address specified by the I/O read transaction,the chipset 114 may subsequently refrain from generating snoop cycles onthe bus 116.

Flow proceeds to block 324. At block 324, the microcode 208 puts thecore 106 to sleep. Flow ends at block 324.

Referring now to FIG. 4, a flowchart illustrates operation of anothercomponent of the system 100 of FIG. 1 to perform decentralized powermanagement distributed among the multiple processing cores 106 of themulti-core microprocessor 102. More specifically, the flowchartillustrates operation of an instance the sync_cstate routine of thepower-state management microcode 208 of FIG. 3 (and FIG. 6). AlthoughFIG. 4 is a flowchart illustrating the functionality of a singleinstance of the sync_cstate routine of the microcode 208, it will beunderstood from below that it carries out a composite C-state discoveryprocess through multiple synchronized instances of that routine. Flowbegins at block 402.

At block 402, an instance of the sync_cstate routine of the microcode208 (“sync_cstate microcode 208”) on a core 106 is invoked and receivesan input probe C-state, denoted “A” in FIG. 4. An instance of thesync_cstate routine may be invoked natively from the MWAIT instructionmicrocode 208, as described with respect to FIG. 3, in which case thesync_cstate routine constitutes an initial instance of the sync_cstateroutine. Additionally, an instance of the sync_cstate routine may beinduced by a synchronization request originating from another core,referred to herein as an externally generated synchronization request,in which case the sync_cstate routine constitutes a dependent instanceof the sync_cstate routine. More particularly, a pre-existing instanceof the sync_cstate routine running on another, nodally-connected coremay induce the native instance of the sync_cstate routine by sending anappropriate inter-core interrupt to the native core. As described inmore detail with respect to FIG. 6, an inter-core interrupt handler(ICIH) of the power-statement management microcode 208 handles theinter-core interrupt received from the nodally connected core 106.

Flow proceeds to decision block 404. At decision block 404, if thisinstance (i.e., “the native instance”) of the sync_cstate routine is aninitial instance, that is, if it was invoked from the MWAIT instructionmicrocode 208 of FIG. 3, then flow proceeds to block 406. Otherwise, thenative instance is a dependent instance that was induced by an externalor non-native instance of the sync_cstate routine running on anodally-connected core, and flow proceeds to decision block 432.

At block 406, the sync_cstate microcode 208 induces a dependentsync_cstate routine on its pal core by programming the CSR 236 of FIG. 2to send to its pal the “A” value received at block 402 and to interruptthe pal. This requests the pal to calculate and return a compoundC-state to the native core 106, as described in more detail below.

Flow proceeds to block 408. At block 408, the sync_cstate microcode 208programs the CSR 236 to detect that the pal has returned a compoundC-state to the core 106 and, if so, obtains the pal's compound C-state,denoted “B” in FIG. 4. It is noted that if the pal is in its most activerunning state, then the value of “B” will be zero. In one embodiment,the microcode 208 waits for the pal to respond to the request made atblock 406 in a loop that polls the CSR 236 for a predetermined value todetect that the pal has returned a compound C-state. In one embodiment,the loop includes a timeout counter; if the timeout counter expires,then the microcode 208 assumes the pal core 106 is no longer enabled andoperational, does not include an applicable or assumed C-state for thatpal in any subsequent sync_cstate calculation, and subsequently does notattempt to communicate with the pal core 106. Furthermore, the microcode208 operates similarly in communications with other cores 106 (i.e.,buddy cores and chum cores), regardless of whether it is communicatingwith another core 106 via the inter-core communication wires 112 or theinter-die communication wires 118 (or the inter-package communicationwires 1133 described below).

Flow proceeds to block 412. At block 412, the sync_cstate microcode 208computes a compound C-state for the die 104 of which the core 106 is apart, by computing the minimum value of the “A” and “B” values, which isdenoted “C.” In a dual-core die, “C” will necessarily be the compositeC-state because the “A” and “B” values represent the applicable C-statesof all (two) of the cores on the die.

Flow proceeds to decision block 414. At decision block 414, if the “C”value computed at block 412 is less than 2 or the native core 106 is notthe master core 106, flow proceeds to block 416. Otherwise, the “C”value is at least two and the native core 106 is a master core, and flowproceeds to block 422.

At block 416, the routine returns to the calling process that invoked it(here, the STRHL routine) the “C” value computed at block 412. Flow endsat block 416.

At block 422, the sync_cstate microcode 208 induces a dependent instanceof the sync_cstate routine on its buddy core by programming the CSR 234of FIG. 2 to send to its buddy the “C” value computed at block 412 andto interrupt the buddy. This requests the buddy to calculate and returna compound C-state and to provide it back to this core 106, as describedin more detail below.

At this point, it should be noted that the sync_cstate microcode 208does not induce dependent instances of the sync_cstate routine in buddycores until it has already determined its own die's composite C-state.Indeed, all of the sync_cstate routines described in this specificationoperate in accordance with a consistent nested domain traversal order.That is, each sync_cstate routine progressively and conditionallydiscovers composite C-states, first of the lowest domain of which it isa part (e.g., the die), then, if it is the master of that domain, of thenext higher level domain in which it is nested (e.g., in the case ofFIG. 1, the processor itself), and so on. FIG. 13, discussed later,further illustrates this traversal order, with the sync_cstate routineconditionally and progressively discovering composite C-states first ofthe die of which the core is a part, then (if the core is also a masterof that die) of the package of which it is a part, and then finally (ifthe core is also the BSP of the processor) of the entire processor orsystem.

Flow proceeds to block 424. At block 424, the sync_cstate microcode 208programs the CSR 234 to detect that the buddy has returned a compoundC-state and obtains the compound C-state, denoted “D” in FIG. 4. “D”will, under some circumstances, but not necessarily all (as explainedbelow in connection with a corresponding value “L” in Figure C),constitute the buddy's die composite C-state.

Flow proceeds to block 426. At block 426, the sync_cstate microcode 208computes a compound C-state for the multi-core microprocessor 102 bycomputing the minimum value of the “C” and “D” values, which is denoted“E.” Assuming that “D” was the buddy's die composite C-state, then “E”will necessarily constitute the composite C-state of the processor,because “E” will be the minimum of “C”—which we know, as explainedabove, to be this die's composite C-state and “D”—the buddy's diecomposite C-state, and there are no cores on the processor that havebeen omitted from the calculation. If not, then “E” may constitute onlya partial composite C-state of the processor (i.e., the minimum ofapplicable C-states of the cores on this die and the buddy core, but notalso of the buddy's pal). Flow proceeds to decision block 428.

At block 428, the routine returns to its caller the “E” value computedat block 426. Flow ends at block 428.

At decision block 432, if the inter-core interrupt handler of FIG. 6invoked the sync_cstate routine in response to an interrupt from thecore's pal (i.e., a pal invoked the routine), flow proceeds to block434. Otherwise, the inter-core interrupt handler invoked the sync_cstateroutine in response to an interrupt from the core's buddy (i.e., thebuddy induced the routine), and flow proceeds to block 466.

At block 434, the core 106 was interrupted by its pal, so thesync_cstate microcode 208 programs the CSR 236 to obtain the probeC-state passed by the pal and its inducing routine, denoted “F” in FIG.4. Flow proceeds to block 436.

At block 436, the sync_cstate microcode 208 computes a compound C-statefor its die 104 by computing the minimum value of its own applicableC-state “Y” and the probe C-state “F” it received from its pal, theresult of which is denoted “G.” In a dual-core die, “G” will necessarilybe the composite C-state for the die 104 that includes the core 106,because “Y” and “F,” in that case, necessarily represent respectiveapplicable C-states for all of the (two) cores of that die.

Flow proceeds to decision block 438. At decision block 438, if the “G”value computed at block 436 is less than 2 or the core 106 is not themaster core 106, flow proceeds to block 442. Otherwise, if “G” is atleast two and the core is a master core, then flow proceeds to block446.

At block 442, in response to the request via the inter-core interruptfrom its pal, the sync_cstate microcode 208 programs the CSR 236 to sendto its pal the “G” value computed at block 436. Flow proceeds to block444. At block 444 the sync_cstate microcode 208 returns to the processthat invoked it the “G” value computed at block 436. Flow ends at block444.

At block 446, the sync_cstate microcode 208 induces a dependent instanceof the sync_cstate routine on its buddy core by programming the CSR 234of FIG. 2 to send to its buddy the “G” value computed at block 436 andto interrupt the buddy. This requests the buddy to calculate and returna compound C-state to this core 106, as described in more detail below.Flow proceeds to block 448.

At block 448, the sync_cstate microcode 208 programs the CSR 234 todetect that the buddy has returned a compound C-state to the core 106and obtains the compound C-state, denoted “H” in FIG. 4. In at leastsome but not necessarily all circumstances (as explained in connectionwith a corresponding value “L” in FIG. 4C), “H” will constitute thecomposite C-state of the buddy's die. Flow proceeds to block 452.

At block 452, the sync_cstate microcode 208 computes a compound C-statefor the multi-core microprocessor 102 by computing the minimum value ofthe “G” and “H” values, which is denoted “J.” Assuming that “H” was thebuddy's die composite C-state, then “J” will necessarily constitute thecomposite C-state for the processor, because “J” will be the minimum of“G”—which we know, as explained above, to be this die's compositeC-state and “H”—the buddy's die composite C-state, and there are nocores on the processor that have been omitted from the calculation. Ifnot, then “J” may constitute only a partial composite C-state of theprocessor (i.e., the minimum of applicable C-states of the cores on thisdie and the buddy core, but not also of the buddy's pal). Accordingly,“H” constitutes the processor's “at least partially composite” C-state.

Flow proceeds to block 454. At block 454, in response to the request viathe inter-core interrupt from its pal, the sync_cstate microcode 208programs the CSR 236 to send to its pal the “J” value computed at block452. Flow proceeds to block 456. At block 456 the routine returns to theprocess that invoked it the “J” value computed at block 452. Flow endsat block 456.

At block 466, the core 106 was interrupted by its buddy, so thesync_cstate microcode 208 programs the CSR 234 to obtain the input probeC-state passed by the buddy in inducing the routine, denoted “K” in FIG.4.

Due to the hierarchical traversal order of the sync_cstate routine, thebuddy would not have interrupted this core unless it had alreadydiscovered the composite C-state of its die, so “K” is necessarily thecomposite C-state of the inducing buddy. Also, it is noted that becauseit was interrupted by a buddy, this implies that the core 106 is themaster core 106 of its die 104.

Flow proceeds to block 468. At block 468, the sync_cstate microcode 208computes an at least partial composite C-state of the processor bycomputing the minimum value of its own applicable C-state “Y” and thereceived buddy composite C-state “K” value, the result of which isdenoted “L.”

If “L” is 1, “L” may not be the composite C-state of the processorbecause it does not incorporate the applicable C-state of its pal. If anapplicable C-state of its pal is 0, then the (not precisely discovered)composite C-state for the processor is necessarily 0. However, thecomposite C-state of the processor, even though not necessarilyprecisely discovered, can be no greater than “L.” In thepower-management logic disclosed in this particular threshold-triggeringembodiment, once a compound C-state less than 2 is discovered, it isknown that the processor's composite C-state is also less than 2.Implementation of a C-state of less than 2 will have only predominantlylocal effects, so a more precise determination of the composite C-stateis not merited. Therefore the composite C-state discovery process may bewound down and terminated, as shown herein.

If “L” is 0, however, then it is necessarily the composite C-state ofthe processor because (as stated above) the composite C-state of theprocessor cannot exceed any compound C-state of the processor. It is inrecognition of such subtleties that portions of the specification referto the sync_cstate routine as calculating an “at least partial compositevalue.” Flow proceeds to decision block 472.

At decision block 472, if the “L” value computed at block 468 is lessthan 2, flow proceeds to block 474. Otherwise, flow proceeds to block478. It should be noted that other embodiments of the invention couldomit such threshold conditions (e.g., L<2?) for continuing a compositeC-state discovery process. In such embodiments, each enabled core of theprocessor would unconditionally determine the composite C-state of theprocessor.

At block 474, in response to the request via the inter-core interruptfrom its buddy, the sync_cstate microcode 208 programs the CSR 234 tosend to its buddy the “L” value computed at block 468. Again, it isnoted that when the buddy receives “L,” it is receiving what mayconstitute only a partial composite value of the processor. However,because “L” is less than 2, than the composite value of the processor isalso necessarily less than 2, obviating any impetus (if “L” is 1) for amore precise determination of the processor's composite value. Flowproceeds to block 476. At block 476 the routine returns to its callerthe “L” value computed at block 468. Flow ends at block 476.

At block 478, the sync_cstate microcode 208 invokes a dependentsync_cstate routine on its pal core by programming the CSR 236 to sendto its pal the “L” value computed at block 468 and to interrupt the pal.This requests the pal to calculate and provide a compound C-state to thecore 106. It is noted that in the quad-core embodiment of FIG. 1 forwhich the sync_cstate microcode 208 of FIG. 4 is illustrated, this wouldbe equivalent to asking the pal to provide its most recent requestedC-state, if any.

Flow proceeds to block 482. At block 482, the sync_cstate microcode 208programs the CSR 236 to detect that the pal has returned a compoundC-state to the core 106 and obtains the pal's compound C-state, denoted“M” in FIG. 4. It is noted that if the pal is in its most active runningstate, then the value of “M” will be zero. Flow proceeds to block 484.

At block 484, the sync_cstate microcode 208 computes a compound C-statefor the multi-core microprocessor 102 by computing the minimum value ofthe “L” and “M” values, which is denoted “N.” It is noted that in thequad-core embodiment of FIG. 1 for which the sync_cstate microcode 208of FIG. 4 is illustrated, “N” is necessarily the composite C-state ofthe processor, because it comprises the minimum of the buddy's diecomposite C-state K, the core's own applicable C-state A, and the pal'sapplicable C-state (the latter of which is incorporated into thecompound power state M returned by the pal), which together include theapplicable C-states of all four cores.

Flow proceeds to block 486. At block 486, in response to the request viathe inter-core interrupt from its buddy, the sync_cstate microcode 208programs the CSR 234 to send to its buddy the “N” value computed atblock 484. Flow proceeds to block 488. At block 488 the routine returnsto its caller the “N” value computed at block 484. Flow ends at block488.

Referring now to FIG. 5, a flowchart illustrating operation of thesystem 100 of FIG. 1 to perform decentralized power managementdistributed among the multiple processing cores 106 of the multi-coremicroprocessor 102 according to the present invention is shown. Morespecifically, the flowchart illustrates operation by a core of awake-and-resume routine of the power-state management microcode 208 inresponse to an event that wakes up the core 106 from a sleeping statesuch as is entered from blocks 306, 316, or 324 of FIG. 3, or from block614 of FIG. 6. Flow begins at block 502.

At block 502, the core 106 wakes up from its sleeping state in responseto an event and resumes by fetching and executing an instruction handlerof microcode 208. The event may include, but is not limited to: aninter-core interrupt, i.e., an interrupt from another core 106 via theinter-core communication wires 112 or the inter-die communication wires118 (or the inter-package communication wires 1133 of the embodiment ofFIG. 11); the assertion of the STPCLK signal on the bus 116 by thechipset 114; the deassertion of the STPCLK signal on the bus 116 by thechipset 114; and another type of interrupt such as the assertion of anexternal interrupt request signal, such as might be generated by aperipheral device such as a USB device. Flow proceeds to decision block504.

At decision block 504, the wake-and-resume routine determines whetherthe core 106 was awakened by an interrupt from another core 106. If so,flow proceeds to block 506; otherwise, flow proceeds to decision block508.

At block 506, an inter-core interrupt routine handles the inter-coreinterrupt as described in detail with respect to FIG. 6. Flow ends atblock 506.

At decision block 508, the wake-and-resume routine determines whetherthe core 106 was awakened by the assertion of the STPCLK signal on thebus 116 by the chipset 114. If so, flow proceeds to block 512;otherwise, flow proceeds to decision block 516.

At block 512, in response to the I/O read transaction performed at block322 of FIG. 3 or at block 608 of FIG. 6, the chipset 114 has assertedSTPCLK to request permission to remove the bus 116 clock. In response,the core 106 microcode 208 issues a STOP GRANT message on the bus 116 toinform the chipset 114 that it may remove the bus 116 clock. Asdescribed above, in one embodiment, the chipset 114 waits until all thecores 106 have issued a STOP GRANT message until it removes the bus 116clock, whereas in another embodiment the chipset 114 removes the bus 116clock after a single core 106 has issued the STOP GRANT message. Flowproceeds to block 514.

At block 514, the core 106 goes back to sleep. Proximately, the chipset114 will remove the bus 116 clock in order to reduce power consumptionby the multi-core microprocessor 102, as discussed above. Eventually,the chipset 114 will restore the bus 116 clock and then deassert STPCLKin order to cause the cores 106 to return to their running states sothat they can execute user instructions. Flow ends at block 514.

At decision block 516, the wake-and-resume routine determines whetherthe core 106 was awakened by the deassertion of the STPCLK signal on thebus 116 by the chipset 114. If so, flow proceeds to block 518;otherwise, flow proceeds to block 526.

At block 518, in response to an event, such as a system timer interruptor peripheral interrupt, the chipset 114 has restored the bus 116 clockand deasserted STPCLK to cause the cores 106 to start running again. Inresponse, the wake-and-resume routine undoes the power savings actionsperformed at block 308. For example, the microcode 208 may restore powerto the core 106 local caches, increase the core 106 clock frequency, orincrease the core 106 operating voltage. Additionally, the core 106 mayrestore power to shared caches, for example if the core 106 is the BSP.Flow proceeds to block 522.

At block 522, the wake-and-resume routine reads and writes the CSR 234and 236 to notify all the other cores 106 that this core 106 is awakeand running again. The wake-and-resume routine may also store “0” as thecore's applicable or most recent valid requested C-state. Flow proceedsto block 524.

At block 524, the wake-and-resume routine exits and returns control backto the instruction translator 204 to resume translating fetched userprogram instructions, e.g., x86 instructions. Specifically, typicallyuser instruction fetch and execution will resume at the instructionafter the MWAIT instruction. Flow ends at block 524.

At block 526, the wake-and-resume routine handles other interruptingevents, such as those mentioned above with respect to block 502. Flowends at block 526.

Referring now to FIG. 6, a flowchart illustrating operation of thesystem 100 of FIG. 1 to perform decentralized power managementdistributed among the multiple processing cores 106 of the multi-coremicroprocessor 102 according to the present invention is shown. Morespecifically, the flowchart illustrates operation of an inter-coreinterrupt handling routine (ICIHR) of the microcode 208 in response toreceiving an inter-core interrupt, i.e., an interrupt from another core106 via the inter-core communication wires 112 or inter-diecommunication wires 118, such as may be generated at blocks 406, 422,446, or 478 of FIG. 4. The microcode 208 may take an inter-coreinterrupt by polling (if the microcode 208 is already running), or themicrocode 208 may take an inter-core interrupt as a true interrupt inbetween user program instructions, or the interrupt may cause themicrocode 208 to wake up from a state in which the core 106 is sleeping.

Flow begins at block 604. At block 604, the ICIHR of the interruptedcore 106 calls a native sync_cstate routine, in accordance with FIG. 4,to continue a synchronized power state discovery process initiated onanother core. In response, it obtains an at least partial compositeC-state for the multi-core microprocessor 102, denoted “PC” in FIG. 6.The ICIHR calls the sync_cstate microcode 208 with an input value “Y”,which is the probe C-state passed by the external sync_cstate routinefrom which the native sync_cstate routine will depend. Incidentally, avalue of greater than or equal to 2 indicates that “PC” is a complete,and not merely partial, composite C-state all the cores 106 of themulti-core microprocessor 102, and that all of the cores 106 of theprocessor have received an MWAIT instruction specifying a C-state of“PC” or greater.

Flow proceeds to block 606. At block 606, the microcode 208 determineswhether the value of “PC” obtained at block 604 is greater than or equalto 2 and whether core 106 is authorized to implement or enableimplementation of “PC” C-state (e.g., the core 106 is the BSP). If so,flow proceeds to block 608; otherwise, flow proceeds to decision block612.

At block 608, the core 106 (e.g., as the BSP core 106 authorized to doso) informs the chipset 114 that it may request permission to remove thebus 116 clock as at block 322 above. Flow proceeds to decision block612.

At decision block 612, the microcode 208 determines whether it wasawakened from sleep. If so, flow proceeds to block 614; otherwise, flowproceeds to block 616.

At block 614, the microcode 208 goes back to sleep. Flow ends at block614.

At block 616, the microcode 208 exits and returns control back to theinstruction translator 204 to resume translating fetched user programinstructions. Flow ends at block 616.

Referring now to FIG. 7, a flow diagram illustrating an example ofoperation of the system 100 of FIG. 1 according to the description ofFIGS. 3 through 6 according to the present invention is shown. In theexample of FIG. 7, the user programs executing on the cores 106effectively simultaneously each execute an MWAIT instruction. Incontrast, in the example of FIG. 8, the user programs executing on thecores 106 effectively each execute an MWAIT instruction at differenttimes, namely after another core has gone to sleep after executing anMWAIT instruction. Together, the examples illustrate features of themicrocode 208 of the cores 106 and their ability to handle differentsequences of MWAIT instructions on the various cores 106. FIG. 7includes four columns, one corresponding to each of the four cores 106of FIG. 1. As shown and as described above with respect to FIG. 1, core0 and core 2 are the master core of their die 104, and core 0 is the BSPof the multi-core microprocessor 102. Each column of FIG. 7 indicatesactions taken by the respective core 106. The downward flow of actionsin each row of FIG. 7 indicates the passage of time.

Initially, each core 106 encounters an MWAIT instruction (at block 302)with various C-states specified. In the example of FIG. 7, the MWAITinstructions to core 0 and to core 3 specify a C-state of 4, and theMWAIT instructions to core 1 and to core 2 specify a C-state of 5. Eachof the cores 106 responsively performs it relevant power saving actions(at block 308) and stores the received target C-state (“X”) as itsapplicable and most recent valid requested C-state “Y”.

Next, each core 106 sends its applicable C-state “Y” as a probe C-stateto its pal (at block 406), as indicated by the arrows with the labeledvalues of “A”. Each core 106 then receives its pal's probe C-state (atblock 408) and computes its die 104 composite C-state “C” (at block412). In the example, the “C” value computed by each core 106 is 4.Since core 1 and core 3 are not master cores, they both go to sleep (atblock 324).

Since core 0 and core 2 are the master core, they send each other (i.e.,their buddy) their respective “C” value (at block 422), as indicated bythe arrows with the labeled values of “C”. They each receive theirbuddy's die composite C-state (at block 424) and compute the multi-coremicroprocessor 102 composite C-state “E” (at block 426). In the example,the “E” value computed by each of core 0 and core 2 is 4. Since core 2is not the BSP core 106, it goes to sleep (at block 324).

Because core 0 is the BSP, it informs the chipset 114 that is mayrequest permission to remove the bus 116 clock (at block 322), e.g., toassert STPCLK. More specifically, core 0 informs the chipset 114 thatthe multi-core microprocessor 102 composite C-state is 4. Core 0 thengoes to sleep (at block 324). Depending upon the predetermined I/O portaddress specified by the I/O read transaction initiated at block 322,the chipset 114 may subsequently refrain from generating snoop cycles onthe bus 116.

While all of the cores 106 are sleeping, the chipset 114 asserts STPCLK,which wakes up each of the cores 106 (at block 502). Each of the cores106 responsively issues a STOP GRANT message to the chipset 114 (atblock 512) and goes back to sleep (at block 514). The cores 106 maysleep for an indeterminate amount of time, advantageously consuming lesspower than they normally would without the benefit of the power savingactions and sleeping.

Eventually, a wakeup event occurs. In the example, the chipset 114deasserts STPCLK, which wakes up each of the cores 106 (at block 502).Each of the cores 106 responsively undoes its previous power savingactions (at block 518) and exits its microcode 208 and returns tofetching and executing user code (at block 524).

Referring now to FIG. 8, a flow diagram illustrating a second example ofoperation of the system 100 of FIG. 1 according to the description ofFIGS. 3 through 6 according to the present invention is shown. The flowdiagram of FIG. 8 is similar to FIG. 7; however, in the example of FIG.8, the user programs executing on the cores 106 effectively each executean MWAIT instruction at different times, namely after another core hasgone to sleep after executing an MWAIT instruction.

Core 3 initially encounters an MWAIT instruction (at block 302) with aspecified target C-state “X” of 4. Core 3 responsively performs itsrelevant power saving actions (at block 308) and stores “X” as itsapplicable C-state, denoted further below as “Y”. Core 3 then sends itsapplicable C-state as a probe C-state to its pal, core 2, (at block406), as indicated by the arrow with the labeled value of “A”, whichinterrupts core 2.

Core 2 is interrupted by its pal core 3 (at block 604). Since core 2 isstill in a running state, its own applicable C-state is 0, denoted “Y”(in block 604). Core 2 receives the probe C-state of core 3 (at block434), denoted “F” and having a value of 4. Core 2 then computes its die104 composite C-state “G” (at block 436) and returns the “G” value of 0back to its pal core 3 (at block 442). Core 2 then exits its microcode208 and returns to user code (at block 616).

Core 3 receives its pal core 2's synch C-state “B” of 0 (at block 408).Core 3 then also computes its die 104 composite C-state “C” (at block412). Since the value of “C” is 0, core 3 goes to sleep (at block 316).

Core 2 subsequently encounters an MWAIT instruction (at block 302) witha specified target C-state “X” of 5. Core 2 responsively performs itsrelevant power saving actions (at block 308) and stores “X” as itsapplicable C-state, later denoted for Core 2 as “Y”. Core 2 then sends“Y” (which is 5) as a probe C-state to its pal, core 3, (at block 406),as indicated by the arrow with the labeled value of “A”, whichinterrupts core 3.

Core 3 is interrupted by its pal core 2 which wakes up core 3 (at block502). Since core 3 previously encountered an MWAIT instructionspecifying a C-state of 4, and that value is still valid, its applicableC-state is 4, denoted “Y” (in block 604). Core 3 receives the probeC-state of core 2 (at block 434), denoted “F” and having a value of 5.Core 3 then computes its die 104 composite C-state “G” (at block 436) asa minimum of the probe C-state (i.e., 5) and its own applicable C-state(i.e., 5) and returns the “G” value of 4 as a compound C-state to itspal core 2 (at block 442). Core 3 then goes back to sleep (at block444).

Core 2 receives its pal core 3's compound C-state (at block 408),denoted “B” and having a value of 4, and then computes its die 104composite C-state “C” value (at block 412) as a minimum of the compoundC-state (i.e., 4) and its own applicable C-state (i.e., 4). Because core2 has discovered a composite C-state of at least 2 for its lowest-leveldomain, but core 2, as a master of that domain, also belongs to ahigher-level kinship group, it then sends its “C” value of 4 to itsbuddy core 0 (at block 422), which interrupts core 0.

Core 0 is interrupted by its buddy core 2 (at block 604). Since core 0is in a running state, its applicable C-state is 0, denoted “Y” (inblock 604). Core 0 receives the probe C-state of core 2 (at block 466),denoted “K” and having a value of 4. Core 0 then computes its compoundC-state “L” (at block 468) and sends the “L” value of 0 to its buddycore 2 (at block 474). Core 0 then exits its microcode 208 and returnsto user code (at block 616).

Core 2 receives its buddy core 0's compound C-state (at block 424),denoted “D” and having a value of 0, and then computes its own compoundC-state (at block 426), which is denoted “E”. Because the “E” value is0, core 2 goes to sleep (at block 316).

Core 0 subsequently encounters an MWAIT instruction (at block 302) witha specified target C-state “X” of 4. Core 0 responsively performs itsrelevant power saving actions (at block 308) and stores “X” as itsapplicable C-state, denoted “Y.” Core 0 then sends “Y” (which is 4) as aprobe C-state to its pal, core 1, (at block 406), as indicated by thearrow with the labeled value of “A”, which interrupts core 1.

Core 1 is interrupted by its pal core 0 (at block 604). Since core 1 isstill in a running state, its applicable C-state is 0, denoted “Y” (inblock 604). Core 1 receives the probe C-state of core 0 (at block 434),denoted “F” and having a value of 4. Core 1 then computes its die 104composite C-state “G” (at block 436) and returns the “G” value of 0 toits pal core 0 (at block 442). Core 1 then exits its microcode 208 andreturns to user code (at block 616).

Core 0 receives its pal core 1's compound C-state “B” of 0 (at block408). Core 0 then computes its die 104 composite C-state “C” (at block412). Since the value of “C” is 0, core 0 goes to sleep (at block 316).

Core 1 subsequently encounters an MWAIT instruction (at block 302) witha specified target C-state “X” of 3. Core 1 responsively stores “X” asits applicable power state “Y” and performs its relevant power savingactions (at block 308). Core 1 then sends its applicable C-state “Y” of3 to its pal, core 0, (at block 406), as indicated by the arrow with thelabeled value of “A”, which interrupts core 0.

Core 0 is interrupted by its pal core 1 which wakes up core 0 (at block502). Since core 0 previously encountered an MWAIT instructionspecifying a target C-state of 4, its applicable C-state is 4, denoted“Y” (in block 604). Core 0 receives the probe C-state of core 1 (atblock 434), denoted “F” and having a value of 3. Core 0 then computesits die 104 composite C-state “G” (at block 436) and sends the “G” valueof 3 to its buddy core 2 (at block 446), which interrupts core 2.

Core 2 is interrupted by its buddy core 0 (at block 604) which wakes upcore 2 (at block 502). Since core 2 previously encountered an MWAITinstruction specifying a C-state of 5, its applicable C-state is 5,denoted “Y” (in block 604). Core 2 receives the probe C-state of core 0(at block 466), denoted “K” and having a value of 3. Core 2 thencomputes a “compound” C-state “L” (at block 468) and sends the “L” valueof 3 to its pal core 3 (at block 474), which interrupts core 3.

Core 3 is interrupted by its pal core 2 which wakes up core 3 (at block502). Since core 3 previously encountered an MWAIT instructionspecifying a C-state of 4, its applicable C-state is 4, denoted “Y” (inblock 604). Core 3 receives the C-state of core 2 (at block 434),denoted “F” and having a value of 3. Core 3 then computes a compoundC-state “G” (at block 436) and sends the “G” value of 3 to its pal core2 (at block 442). Because “G” now accounts for the applicable C-statesof each of the cores, “G” constitutes the multi-core processor 102composite C-state. However, since core 3 is not the BSP and was awakenedfrom sleep, core 3 goes back to sleep (at block 614).

Core 2 receives its pal core 3's compound C-state “M” of 3 (at block482). Core 2 then computes a compound C-state “N” (at block 484). Core 2then sends the “N” value of 3 to its buddy core 0 (at block 486). Again,as “N” accounts for the applicable C-states of each of the cores, “N”also necessarily constitutes the multi-core processor 102 compositeC-state. However, since core 2 is not the BSP and was awakened fromsleep, core 2 goes back to sleep (at block 614).

Core 0 receives its buddy core 2's C-state “H” of 3 (at block 448). Core0 then also computes a compound C-state “J” of 3 (at block 452) andsends it to its pal core 1 (at block 454). Yet again, as “J” accountsfor the applicable C-states of each of the cores, “J” also necessarilyconstitutes the multi-core processor 102 composite C-state. And becausecore 0 is the BSP, it informs the chipset 114 that is may requestpermission to remove the bus 116 clock (at block 608). Morespecifically, core 0 informs the chipset 114 that the multi-coremicroprocessor 102 composite C-state is 3. Core 0 then goes to sleep (atblock 614).

Core 1 receives its pal core 0's C-state “B” of 3 (at block 408). Core 1also computes a compound C-state “C” (at block 412), which is 3 andwhich also constitutes the multi-core processor 102 composite C-state.Since core 1 is not the BSP, core 1 goes to sleep (at block 316).

Now all the cores 106 are asleep as they were in the example of FIG. 7,and events progress from there similar to the manner described withrespect to FIG. 7, i.e., the chipset 114 asserts STPCLK and wakes up thecores 106, and so forth.

Notably, by the time this last synchronized power state discoveryprocess has completed, all of the cores have separately calculated themulti-core processor 102 composite C-state.

In one embodiment, the microcode 208 is configured such that it may notbe interrupted. Thus, in the example of FIG. 7, when the microcode 208of each core 106 is invoked to process its respective MWAIT instruction,the microcode 208 is not interrupted when another core 106 attempts tointerrupt it. Instead, for example, core 0 sees that core 1 has sent itsC-state and gets the C-state from core 1 at block 408, thinking thatcore 1 sent its C-state in response to core 0 interrupting core 1 atblock 406. Likewise, core 1 sees that core 0 has sent its C-state andgets the C-state from core 0 at block 408 thinking that core 0 sent itsC-state in response to core 1 interrupting core 0 at block 406. Becausecore 0 and core 1 each take into account the other core's 106 C-statewhen it computes an at least partial composite C-state, each core 106computes an at least partial composite C-state. Thus, for example, core1 computes an at least partial composite C-state regardless of whethercore 0 sent its C-state to core 1 in response to receiving an interruptfrom core 1 or in response to encountering an MWAIT instruction in whichcase the two C-states may have crossed simultaneously over theinter-core communication wires 112 (or over the inter-die communicationwires 118, or over the inter-package communication wires 1133 in theembodiment of FIG. 11). Thus, advantageously, the microcode 208 operatesproperly to perform decentralized power management among the cores 106of the multi-core microprocessor 102 regardless of the order of eventswith respect to reception of MWAIT instructions by the various cores106.

As may be observed from the foregoing, broadly speaking, when a core 106encounters an MWAIT instruction, it first exchanges C-state informationwith its pal and both cores 106 compute an at least partial compositeC-state for the die 104, which in the case of a dual-core die, forexample, will be the same value, based on the C-states of the two cores106. Master cores 106, only after computing the die 104 compositeC-state, then exchange C-state information with their buddy, and bothcompute a composite C-state for the multi-core microprocessor 102, whichwill be the same value, based on the composite C-states of the two dies104. According to this methodology, advantageously, regardless of whichorder the cores 106 receive their MWAIT instructions, all the cores 106compute the same composite C-state. Furthermore, advantageously,regardless of which order the cores 106 receive their MWAITinstructions, they coordinate with one another in a distributed fashionsuch that the multi-core microprocessor 102 communicates as a singleentity to the chipset 114 that it may request permission to engage inpower saving actions that are global to the multi-core microprocessor102, such as removing the bus 116 clock. Advantageously, thisdistributed C-state synchronization to accomplish an aspect of powermanagement is performed without the need for dedicated hardware on thedie 104 outside of the cores 106 to perform the power management, whichmay provide the following advantages: scalability, configurability,yield properties, power reduction, and/or die real estate reduction.

It is noted that each core 106 of other multi-core microprocessorembodiments having different numbers and configurations of cores 106 mayemploy similar microcode 208 as described with respect to FIGS. 3through 6. For example, each core 106 of a dual-core microprocessor 1802embodiment having two cores 106 in a single die 104, such as shown inFIG. 18, may employ similar microcode 208 as described with respect toFIGS. 3 through 6 recognizing that each core 106 only has a pal and nobuddy. Likewise, each core 106 of a dual-core microprocessor 1902embodiment having two single-core dies 104, such as shown in FIG. 19,may employ similar microcode 208 as described with respect to FIGS. 3through 6 recognizing that each core 106 only has a buddy and no pal (oralternatively redesignating the cores 106 as buddies). Likewise, eachcore 106 of a dual-core microprocessor 2002 embodiment havingsingle-core single-die packages 104, such as shown in FIG. 20, mayemploy similar microcode 208 as described with respect to FIGS. 3through 6 recognizing that each core 106 only has a chum and no buddy orpal (or alternatively redesignating the cores 106 as buddies).

Furthermore, each core 106 of other multi-core microprocessorembodiments having asymmetric configurations of cores 106 (such as thoseillustrated in FIGS. 21 and 22) may employ similar microcode 208modified relative to FIGS. 3 through 6, such as described below withrespect to FIGS. 10, 13 and 17. Furthermore, system embodiments arecontemplated other than those described herein with having differentnumbers and configurations of cores 106 and/or packages which employcombinations of the operation of core 106 microcode 208 described belowwith respect to FIGS. 3 through 6 and 10, 13 and 17.

Referring now to FIG. 9, a block diagram illustrating an alternateembodiment of a computer system 900 that performs decentralized powermanagement distributed among multiple processing cores 106 of amulti-core microprocessor 902 according to the present invention isshown. The system 900 is similar to the system of FIG. 1, and themulti-core microprocessor 902 is similar to the multi-coremicroprocessor 102 of FIG. 1; however, the multi-core microprocessor 902is an octa-core microprocessor 902 that includes four dual-core dies104, denoted die 0, die 1, die 2, and die 3, organized on a singlemicroprocessor package. Die 0 includes core 0 and core 1, and die 1includes core 2 and core 3, similar to FIG. 1; additionally, die 2includes core 4 and core 5, and die 3 includes core 6 and core 7. Withineach die, the cores are pals of each other, but a select core of eachdie is designated the master of that die.

The die masters on the package have inter-die communication wiresconnecting each die to every other die. This enables implementation of acoordination system in which the die masters comprise members of apeer-collaborative kinship group; that is, each die master is able tocoordinate with any other die master on the package. The inter-diecommunication wires 118 are configured as follows. The OUT pad of die 0,the IN 1 pad of die 1, the IN 2 pin of die 2, and the IN 3 pin of die 3are coupled to the pin P1 via a single wire net; the OUT pad of die 1,the IN 1 pad of die 2, the IN 2 pad of die 3, and the IN 3 pad of die 0are coupled to the pin P2 via a single wire net; the OUT pad of die 2,the IN 1 pad of die 3, the IN 2 pad of die 0, and the IN 3 pad of die 1are coupled to the pin P3 via a single wire net; the OUT pad of die 3,the IN 1 pad of die 0, the IN 2 pad of die 1, and the IN 3 pad of die 2are coupled to the pin P4 via a single wire net.

When each of the master cores 106 wants to communicate with the otherdies 104, it transmits information on its OUT pad 108 and theinformation is broadcast to the other dies 104 and received via theappropriate IN pad 108 by their respective master core 106. As may beobserved from FIG. 9, advantageously, the number of pads 108 on each die104 and the number of pins P on the package 902 (i.e., pads and pinsrelated to the decentralized power management distributed among multiplecores described herein; whereas, of course the multi-core microprocessor102 includes other pads and pins used for other purposes, such as data,address, and control buses) is no larger than the number of dies 104,which is a relatively small number. This is particularly advantageous ina pad-limited and/or pin-limited design, which may be common sincestandard pad/pin counts exist on standard dies/packages and it iseconomically efficient for a microprocessor manufacturer to attempt toconform to the standard values, and most of the pads/pins may be alreadyused. Furthermore, alternate embodiments are described below in whichthe number of pads 108 on each die 104 is, or may be, less than thenumber of dies 104.

Referring now to FIG. 10, a flowchart illustrating operation of thesystem 900 of FIG. 9 to perform decentralized power managementdistributed among the multiple processing cores 106 of the octa-coremicroprocessor 902 according to the present invention is shown. Morespecifically, the flowchart of FIG. 10 illustrates operation of thesync_cstate microcode 208 of FIG. 3 (and FIG. 6), similar to theflowchart of FIG. 4, which are alike in many respects, and like-numberedblocks are similar. However, the sync_cstate microcode 208 of the cores106 described in the flowchart of FIG. 10 accounts for the presence ofeight cores 106 rather than the four cores 106 in the embodiment of FIG.1, and the differences are now described. In particular, each mastercore 106 of a die 104 has three buddy cores 106 rather than one buddycore 106. Moreover, the master cores 106 together define apeer-collaborative kinship group in which any buddy can directlycoordinate with any other buddy, without mediation by the package masteror BSP.

Flow begins in FIG. 10 at block 402 and proceeds through block 416 asdescribed with respect to FIG. 4. However, FIG. 10 does not includeblocks 422, 424, 426, or 428. Rather, flow proceeds from decision block414 out of the “NO” branch to decision block 1018.

At decision block 1018, the sync_cstate microcode 208 determines whetherall of its buddies have been visited, i.e., whether the core 106 hasexchanged a C-state with each of its buddies via blocks 1022 and 1024.If so, flow proceeds to block 416; otherwise, flow proceeds to block1022.

At block 1022, the sync_cstate microcode 208 induces a new instance ofsync_cstate on its next buddy by programming the CSR 234 of FIG. 2 tosend to its next buddy the “C” value and to interrupt the buddy. In thecase of the first buddy, the “C” value sent was computed at block 412;in the case of the remaining buddies, the “C” value was computed atblock 1026. In the loop comprising blocks 414, 1018, 1022, 1024, and1026, the microcode 208 keeps track of which of the buddies it hasvisited to insure that it visits each of them (unless the condition atdecision block 414 is found to be true).

Flow proceeds to block 1024. At block 1024, the sync_cstate microcode208 programs the CSR 234 to detect that the next buddy has returned acompound C-state and obtains the compound C-state, denoted “D”.

Flow proceeds to block 1026. At block 1026, the sync_cstate microcode208 computes a newly calculated native compound C-state, denoted “C”, bycomputing the minimum value of the “C” and “D” values. Flow returns todecision block 414.

Flow proceeds in FIG. 10 from block 434 and proceeds through block 444as described with respect to FIG. 4. However, FIG. 10 does not includeblocks 446, 448, 452, 454, or 456. Rather, flow proceeds from decisionblock 438 out of the “NO” branch to decision block 1045.

At decision block 1045, the sync_cstate microcode 208 determines whetherall of its buddies have been visited, i.e., whether the core 106 hasexchanged a C-state with each of its buddies via blocks 1046 and 1048.If so, flow proceeds to block 442; otherwise, flow proceeds to block1046.

At block 1046, the sync_cstate microcode 208 induces a new instance ofthe sync_cstate routine on its next buddy by programming the CSR 234 tosend to its next buddy the “G” value and to interrupt the buddy. In thecase of the first buddy, the “G” value sent was computed at block 436;in the case of the remaining buddies, the “G” value was computed atblock 1052.

Flow proceeds to block 1048. At block 1048, the microcode 208 programsthe CSR 234 to detect that the next buddy has returned a compoundC-state to the core 106 and obtains the compound C-state, denoted “H”.

Flow proceeds to block 1052. At block 1052, the sync_cstate microcode208 computes a newly calculated native compound C-state, denoted “G”, bycomputing the minimum value of the “G” and “H” values. Flow returns todecision block 438.

Flow proceeds in FIG. 10 from block 466 and proceeds through block 476as described with respect to FIG. 4. It is noted that at block 474, thebuddy to whom the core 106 sends the “L” value is the buddy thatinterrupted the core 106. Additionally, flow proceeds in FIG. 10 fromdecision block 472 out of the “NO” branch and proceeds through block 484as described with respect to FIG. 4. However, FIG. 10 does not includeblocks 486 or 488. Rather, flow proceeds from block 484 to decisionblock 1085.

At decision block 1085, if the “L” value is less than 2, flow proceedsto block 474; otherwise, flow proceeds to decision block 1087. In thecase that flow proceeded to decision block 1085 from block 484, the “L”value was computed at block 484; in the case that flow proceeded todecision block 1085 from block 1093, the “L” value was computed at block1093. Flow proceeds to decision block 1087.

At decision block 1087, the synch_cstate microcode 208 determineswhether all of its buddies have been visited, i.e., whether the core 106has exchanged a C-state with or received a C-state from each of itsbuddies. In the case of the interrupting buddy, the C-state was receivedvia block 466 (and will be sent via block 474); thus, the interruptingbuddy is considered to have been visited already; in the case of theremaining buddies, the C-state is exchanged via blocks 1089 and 1091. Ifall of its buddies have been visited, flow proceeds to block 474;otherwise, flow proceeds to block 1089.

At block 1089, the microcode 208 induces a new instance of thesync_cstate routine on its next buddy by programming the CSR 234 to sendto its next buddy the “L” value and to interrupt the buddy. In the caseof the first buddy, the “L” value sent was computed at block 484; in thecase of the remaining buddies, the “L” value was computed at block 1093.

Flow proceeds to block 1091. At block 1091, the microcode 208 programsthe CSR 234 to detect that the next buddy has returned a compoundC-state to the core 106 and obtains the compound C-state, denoted “M”.

Flow proceeds to block 1093. At block 1093, the sync_cstate microcode208 computes a newly calculated value of the native compound C-state,denoted “L”, by computing the minimum value of the “L” and “M” values.Flow returns to decision block 1085.

Referring now to FIG. 11, a block diagram illustrating an alternateembodiment of a computer system 1100 that performs decentralized powermanagement distributed among multiple processing cores 106 of twomulti-core microprocessors 102 according to the present invention isshown. The system 1100 is similar to the system 100 of FIG. 1, and thetwo multi-core microprocessors 102 are each similar to the multi-coremicroprocessor 102 of FIG. 1; however, the system includes two ofmulti-core microprocessors 102 coupled together to provide an octa-coresystem 1100. Thus, the system 1100 of FIG. 11 is also similar to system900 of FIG. 9 in that it includes four dual-core dies 104, denoted die0, die 1, die 2, and die 3. Die 0 includes core 0 and core 1, die 1includes core 2 and core 3, die 2 includes core 4 and core 5, and die 3includes core 6 and core 7. However, die 0 and die 1 are included in thefirst multi-core microprocessor package 102, and die 2 and die 3 areincluded in the second multi-core microprocessor package 102. Thus,although the cores 106 are distributed among multiple multi-coremicroprocessor packages 102 in the embodiment of FIG. 11, the cores 106nevertheless share some power management-related resources, namely thebus 116 clock supplied by the chipset 114 and the chipset's 114 policyto snoop or not snoop caches on the processor bus, such that the chipset114 expects the single I/O Read transaction on the bus 116 from thepredetermined I/O port address. Additionally, the cores 106 of the twopackages 102 potentially share a VRM, and cores 106 of a die 104 mayshare a PLL, as mentioned above. Advantageously, the cores 106 of thesystem 1100 of FIG. 11, particularly the microcode 208 of the cores 106,are configured to communicate with one another to coordinate control ofthe shared power management-related resources in a decentralized fashionusing the inter-core communication wires 112, inter-die communicationwires 118, and inter-package communication wires 1133 (described below),as described herein and in CNTR.2534.

The inter-die communication wires 118 of the first multi-coremicroprocessor 102 are configured as in FIG. 1. However, the pins of thesecond multi-core microprocessor 102 are denoted “P5”, “P6”, “P7”, and“P8”, and the inter-die communication wires 118 of the second multi-coremicroprocessor 102 are configured as follows. The IN 2 pad of die 2 andthe IN 3 pad of die 3 are coupled to the pin P5 via a single wire net;the IN 1 pad of die 2 and the IN 2 pad of die 3 are coupled to the pinP6 via a single wire net; the OUT pad of die 2 and the IN 1 pad of die 3are coupled to the pin P7 via a single wire net; the OUT pad of die 3and the IN 3 pad of die 2 are coupled to the pin P8 via a single wirenet. Furthermore, via inter-package communication wires 1133 of amotherboard of the system 1100, the pin P1 of the first multi-coremicroprocessor 102 is coupled to the pin P7 of the second multi-coremicroprocessor 102, such that the OUT pad of die 0, the IN 1 pad of die1, the IN 2 pad of die 2, and the IN 3 pad of die 3 are all coupledtogether via a single wire net; the pin P2 of the first multi-coremicroprocessor 102 is coupled to the pin P8 of the second multi-coremicroprocessor 102, such that the OUT pad of die 1, the IN 1 pad of die2, the IN 2 pad of die 3, and the IN 3 pad of die 0 are all coupledtogether via a single wire net; the pin P3 of the first multi-coremicroprocessor 102 is coupled to the pin P5 of the second multi-coremicroprocessor 102, such that the OUT pad of die 0, the IN 1 pad of die1, the IN 2 pad of die 2, and the IN 3 pad of die 3 are all coupledtogether via a single wire net; and the pin P4 of the first multi-coremicroprocessor 102 is coupled to the pin P6 of the second multi-coremicroprocessor 102, such that the OUT pad of die 0, the IN 1 pad of die1, the IN 2 pad of die 2, and the IN 3 pad of die 3 are all coupledtogether via a single wire net. The CSR 234 of FIG. 2 are also coupledto the inter-package communication wires 1133 to enable the microcode208 also to program the CSR 234 to communicate with the other cores 106via the inter-package communication wires 1133. Thus, the master core106 of each die 104 is enabled to communicate with the master core 106of each other die 104 (i.e., its buddies) via the inter-packagecommunication wires 1133 and the inter-die communication wires 118. Wheneach of the master cores 106 wants to communicate with the other dies104, it transmits information on its OUT pad 108 and the information isbroadcast to the other dies 104 and received via the appropriate IN pad108 by their respective master core 106. As may be observed from FIG.11, advantageously, with respect to each multi-core microprocessor 102,the number of pads 108 on each die 104 and the number of pins P on thepackage 102 is no larger than the number of dies 104, which is arelatively small number.

Noting again that for a given master core 106 of a die 104, the mastercore 106 of every other die 104 is a “buddy” core 106 of the givenmaster core 106, it may be observed from FIG. 11 that core 0, core 2,core 4, and core 6 are buddies similar to the configuration in FIG. 9,even though in FIG. 9 all of the four dies 104 are contained in a singleocta-core microprocessor package 902, whereas in FIG. 11 the four dies104 are contained in two separate quad-core microprocessor packages 102.Thus, the microcode 208 described with respect to FIG. 10 is configuredto also operate in the system 1100 of FIG. 11. Moreover, all four buddycores 106 together form a peer-collaborative kinship group, wherein eachbuddy core 106 is enabled to directly coordinate with any other of thebuddy cores 106 without mediation by whichever buddy core 106 isdesignated as the BSP core.

It is further noted that whereas the pins P are necessary in themulti-processor embodiments, such as those of FIG. 11 and FIG. 12, thepins may be omitted in the single multi-core microprocessor 102embodiments if necessary, although they are helpful for debuggingpurposes.

Referring now to FIG. 12, a block diagram illustrating an alternateembodiment of a computer system 1200 that performs decentralized powermanagement distributed among multiple processing cores 106 of twomulti-core microprocessors 1202 according to the present invention isshown. The system 1200 is similar to the system 1100 of FIG. 11 and themulti-core microprocessors 1202 are similar to the multi-coremicroprocessors 102 of FIG. 11. However, the eight cores of system 1200are organized and physically connected by sideband wires in accordancewith a deeper hierarchical coordination system.

Each die 104 has only three pads 108 (OUT, IN 1, and IN 2) for couplingto the inter-die communication wires 118; each package 1202 has only twopins, denoted P1 and P2 on the first multi-core microprocessor 1202 anddenoted P3 and P4 on the second multi-core microprocessor 1202; and theinter-die communication wires 118 and the inter-package communicationwires 1133 that connect the two multi-core microprocessors 1202 of FIG.12 have a different configuration than their counterparts of FIG. 11.

In the system 1200 of FIG. 12, core 0 and core 4 are designated as“package masters” or “pmasters” of their respective multi-coremicroprocessor 1202. Furthermore, the term “chum,” unless otherwiseindicated, is used herein to refer to pmaster cores 106 on differentpackages 1202 that communicate with one another; thus, in the embodimentof FIG. 12, core 0 and core 4 are chums. The inter-die communicationwires 118 of the first multi-core microprocessor 1202 are configured asfollows. Within the first package 1202, the OUT pad of die 0 and the IN1 pad of die 1 are coupled to the pin P1 via a single wire net; the OUTpad of die 1 and the IN 1 pad of die 0 are coupled via a single wirenet; and the IN 2 pad of die 0 is coupled to pin P2. Within the secondpackage 1201, the OUT pad of die 2 and the IN 1 pad of die 3 are coupledto the pin P3 via a single wire net; the OUT pad of die 3 and the IN 1pad of die 2 are coupled via a single wire net; and the IN 2 pad of die2 is coupled to pin P4. Furthermore, via inter-package communicationwires 1133 of the motherboard of the system 1200, pin P1 is coupled topin P4, such that the OUT pad of die 0, the IN 1 pad of die 1, and theIN 2 pad of die 2 are all coupled together via a single wire net; andpin P2 is coupled to pin P3, such that the OUT pad of die 2, the IN 1pad of die 3, and the IN 2 pad of die 0 are all coupled together via asingle wire net.

Thus, unlike in the system 900 of FIG. 9 and in the system 1100 of FIG.11 in which every master core 106 can communicate with every othermaster core 106, in the system 1200 of FIG. 12, only master core 0 andmaster core 4 can communicate (that is, between via the sideband wiresdescribed herein) with one another. An advantage of the embodiment ofFIG. 12 over FIG. 11 is that, with respect to each multi-coremicroprocessor 1202, the number of pads 108 on each die 104 is (one)less than the number of dies 104, and the number of pins P on eachpackage 1202 is (two) less than the number of dies 104, which is arelatively small number. Additionally, the number of C-state exchangesbetween cores 106 may be less. In one embodiment, for debuggingpurposes, the first multi-core microprocessor 1202 also includes a thirdpin coupled to the OUT pad 108 of die 1 and the second multi-coremicroprocessor 1202 also includes a third pin coupled to the OUT pad 108of die 3.

Referring now to FIG. 13, a flowchart illustrating operation of thesystem 1200 of FIG. 12 to perform decentralized power managementdistributed among the multiple processing cores 106 of thedual-quad-core microprocessor 1202 (octa-core) system 1200 according tothe present invention is shown. More specifically, the flowchart of FIG.13 illustrates operation of the sync_cstate microcode 208 of FIG. 3 (andFIG. 6), similar to the flowcharts of FIGS. 4 and 10, which are alike inmany respects, and like-numbered blocks are similar. However, thesync_cstate microcode 208 of the cores 106 described in the flowchart ofFIG. 13 accounts for the fact that the configuration of the inter-diecommunication wires 118 and inter-package communication wires 1133 isdifferent between the system 1200 of FIG. 12 and the system 1100 of FIG.11, specifically that some of the master cores 106 (namely core 2 andcore 4) are not configured to communicate directly with all the othermaster cores 106 of the system 1200, but instead the chums (core 0 andcore 4) communicate in a hierarchical fashion down to their buddies(core 2 and core 6, respectively), which in turn communicate down totheir pal cores 106. The differences are now described.

Flow begins in FIG. 13 at block 402 and proceeds through block 424 asdescribed with respect to FIG. 4. However, FIG. 10 does not includeblocks 426 or 428. Rather, flow proceeds from block 424 to block 1326.Additionally, at decision block 432, if the interrupting core 106 is achum rather than a pal or buddy, flow proceeds to block 1301.

At block 1326, the sync_cstate microcode 208 computes a newly calculatedvalue of the (native) compound C-state, denoted “C”, by computing theminimum value of the “C” and “D” values.

Flow proceeds to decision block 1327. At decision block 1327, if the “C”value computed at block 1326 is less than 2 or the core 106 is not thepackage master core 106, flow proceeds to block 416; otherwise, flowproceeds to block 1329.

At block 1329, the sync_cstate microcode 208 induces a new instance ofsync_cstate on its chum by programming the CSR 234 to send to its chumthe “C” value computed at block 1326 and to interrupt the chum. Thisrequests the chum to calculate and return a compound C-state, which,under circumstances similar to that described above in connection withFIG. 4, may constitute the composite C-state of the entire processor,and to provide it back to this core 106.

Flow proceeds to block 1331. At block 1331, the sync_cstate microcode208 programs the CSR 234 to detect that the chum has returned a compoundC-state to the core 106 and obtains the compound C-state, denoted “D”.

Flow proceeds to block 1333. At block 1333, the sync_cstate microcode208 computes a newly calculated compound C-state, denoted “C”, bycomputing the minimum value of the “C” and “D” values. It is noted that,assuming D is at least 2, then once flow proceeds to block 1333, theC-state of every core 106 in the system 1200 has been considered in thecomposite C-state calculation of the “C” value at block 1333; thus, thecomposite C-state is referred to as the system 1200 composite C-statehere. Flow proceeds to block 416.

Flow proceeds in FIG. 13 from block 434 and proceeds through blocks 444and 448 as described with respect to FIG. 4. However, FIG. 13 does notinclude blocks 452, 454, or 456. Rather, flow proceeds from block 448 toblock 1352.

At block 1352, the sync_cstate microcode 208 computes a newly calculatednative compound C-state, denoted “G”, by computing the minimum value ofthe “G” and “H” values.

Flow proceeds to decision block 1353. At decision block 1353, if the “G”value computed at block 1352 is less than 2 or the core 106 is not thepackage master core 106, flow proceeds to block 442; otherwise, flowproceeds to block 1355.

At block 1355, the sync_cstate microcode 208 induces a new instance ofsync_cstate on its chum by programming the CSR 234 to send to its chumthe “G” value computed at block 1352 and to interrupt the chum. Thisrequests the chum to calculate and return a compound C-state back tothis core 106.

Flow proceeds to block 1357. At block 1357, the sync_cstate microcode208 programs the CSR 234 to detect that the chum has returned a compoundC-state to the core 106 and obtains the compound C-state, denoted “H”.Flow proceeds to block 1359.

At block 1359, the sync_cstate microcode 208 computes a newly calculatednative compound C-state, denoted “G”, by computing the minimum value ofthe “G” and “H” values. It is noted that, assuming H is at least 2, thenonce flow proceeds to block 1359, the C-state of every core 106 in thesystem 1200 has been considered in the composite C-state calculation ofthe “G” value at block 1359; thus, the composite C-state is referred toas the system 1200 composite C-state here. Flow proceeds to block 442.

Flow proceeds in FIG. 13 from block 466 and proceeds through blocks 476and 482 as described with respect to FIG. 4. However, FIG. 13 does notinclude blocks 484, 486, or 488. Rather, flow proceeds from block 482 toblock 1381.

At block 1381, the sync_cstate microcode 208 computes a newly calculatednative compound C-state denoted “L”, by computing the minimum value ofthe “L” and “M” values.

Flow proceeds to decision block 1383. At decision block 1383, if the “L”value computed at block 1381 is less than 2 or the core 106 is not thepackage master core 106, flow proceeds to block 474; otherwise, flowproceeds to block 1385.

At block 1385, the sync_cstate microcode 208 induces a new instance ofsync_cstate on its chum by programming the CSR 234 to send to its chumthe “L” value computed at block 1381 and to interrupt the chum. Thisrequests the chum to calculate and return a compound C-state back tothis core 106.

Flow proceeds to block 1387. At block 1387, the sync_cstate microcode208 programs the CSR 234 to detect that the chum has returned a compoundC-state to the core 106 and obtains the compound C-state, denoted “M”.Flow proceeds to block 1389.

At block 1389, the sync_cstate microcode 208 computes a newly calculatednative synced C-state, denoted “L”, by computing the minimum value ofthe “L” and “M” values. It is noted that, assuming M is at least 2, thenonce flow proceeds to block 1389, the C-state of every core 106 in thesystem 1200 has been considered in the composite C-state calculation ofthe “L” value at block 1389; thus, the composite C-state is referred toas the system 1200 composite C-state here. Flow proceeds to block 474.As stated above, at decision block 432, if the interrupting core 106 isa chum rather than a pal or buddy, flow proceeds to block 1301.

At block 1301, the core 106 was interrupted by its chum, so themicrocode 208 programs the CSR 234 to obtain from its chum the chum'scomposite C-state, denoted “Q” in FIG. 13. It is noted that if the chumwould not have invoked this instance of synch_cstate if it has notalready determined a composite C-state for its package of at least 2.

Flow proceeds to block 1303. At block 1303, the sync_cstate microcode208 computes a native compound C-state, denoted “R”, as the minimumvalue of its applicable C-state “Y” value and the “Q” value received atblock 1301.

Flow proceeds to decision block 1305. At decision block 1305, if the “R”value computed at block 1303 is less than 2, flow proceeds to block1307; otherwise, flow proceeds to block 1311.

At block 1307, in response to the request via the inter-core interruptfrom its chum, the microcode 208 programs the CSR 234 to send to itschum the “R” value computed at block 1303. Flow proceeds to block 1309.At block 1309 the routine returns to its caller the “R” value computedat block 1303. Flow ends at block 1309.

At block 1311, the sync_cstate microcode 208 induces a new instance ofsync_cstate on its pal by programming the CSR 236 to send to its pal the“R” value computed at block 1303 and to interrupt the pal. This requeststhe pal to calculate and return a compound C-state to the core 106.

Flow proceeds to block 1313. At block 1313, the sync_cstate microcode208 programs the CSR 236 to detect that the pal has returned a compoundC-state to the core 106 and obtains the pal compound C-state, denoted“S” in FIG. 13.

Flow proceeds to block 1315. At block 1315, the sync_cstate microcode208 computes a newly calculated native compound C-state, denoted “R”, bycomputing the minimum value of the “R” and “S” values.

Flow proceeds to decision block 1317. At decision block 1317, if the “R”value computed at block 1315 is less than 2, flow proceeds to block1307; otherwise, flow proceeds to block 1319.

At block 1319, the sync_cstate microcode 208 induces a new instance ofsync_cstate on its buddy by programming the CSR 234 to send to its buddythe “R” value computed at block 1315 and to interrupt the buddy. Thisrequests the buddy calculate and return a compound C-state to this core106.

Flow proceeds to block 1321. At block 1321, the sync_cstate microcode208 programs the CSR 234 to detect that the buddy has returned acompound C-state to the core 106 and obtains the compound C-state,denoted “S”.

Flow proceeds to block 1323. At block 1323, the sync_cstate microcode208 computes a newly calculated native compound C-state, denoted “R”, bycomputing the minimum value of the “R” and “S” values. It is noted that,provided S is at least 2, then once flow proceeds to block 1323, theC-state of every core 106 in the system 1200 has been considered in thecalculation of the “R” value at block 1323; thus, “R” constitutes thecomposite C-state of the system 1200. Flow proceeds to block 1307.

Referring now to FIG. 14, a block diagram illustrating an alternateembodiment of a computer system 1400 that performs decentralized powermanagement distributed among multiple processing cores 106 of amulti-core microprocessor 1402 according to the present invention isshown. The system 1400 is similar in some ways to the system 900 of FIG.9 in that is includes a single octa-core microprocessor 1402 having fourdual-core dies 104 on a single package coupled together via inter-diecommunication wires 118. However, the eight cores of system 1400 areorganized and physically connected by sideband wires in accordance witha deeper, three-level, hierarchical coordination system.

First, the configuration of the inter-die communication wires 118 isdifferent from that of FIG. 9, as described below. Notable, the system1400 is similar in some ways to the system 1200 of FIG. 12, in which thecores are also organized and physically connected in accordance with athree-level hierarchical coordination system. Each of the four dies 104includes three pads 108 for coupling to the inter-die communicationwires 118, namely the OUT pad, the IN 1 pad, and the IN 2 pad. Themulti-core microprocessor 1402 of FIG. 14 includes four pins denoted“P1”, “P2”, “P3”, and “P4”. The configuration of the inter-diecommunication wires 118 of the multi-core microprocessor 1402 of FIG. 14is as follows. The OUT pad of die 0, the IN 1 pad of die 1, and the IN 2pad of die 2 are all coupled together via a single wire net that iscoupled to pin P1; the OUT pad of die 1 and the IN 1 pad of die 0 arecoupled together via a single wire net that is coupled to pin P2; theOUT pad of die 2, the IN 1 pad of die 3, and the IN 2 pad of die 0 areall coupled together via a single wire net that is coupled to pin P3;the OUT pad of die 3 and the IN 1 pad of die 2 are coupled together viaa single wire net that is coupled to pin P4.

The cores 106 of FIG. 14 are configured to operate according to thedescription of FIG. 13 with the understanding that core 0 and core 4 areconsidered chums even though they are in the same package 1402, contraryto the meaning of the term “chum” stated with respect to FIG. 12 above,and that the chums communicate with each other in the embodiment of FIG.14 via the inter-die communication wires 118 rather than via theinter-package communication wires 1133 of FIG. 12. Note that here, thecores are configured in accordance with a hierarchical coordinationsystem that is deeper, having three levels of domains, than theprocessor's physical model.

Referring now to FIG. 15, a block diagram illustrating an alternateembodiment of a computer system 1500 that performs decentralized powermanagement distributed among multiple processing cores 106 of amulti-core microprocessor 1502 according to the present invention isshown. The system 1500 is similar in some ways to the system 1400 ofFIG. 14 in that it includes a single octa-core microprocessor 1502having eight cores 106 denoted core 0 through core 7. However, themulti-core microprocessor 1502 comprises two quad-core dies 1504 coupledtogether via inter-die communication wires 118. Each of the two dies1504 includes two pads 108 for coupling to the inter-die communicationwires 118, namely an OUT pad and IN 1, IN 2, and IN 3 pads. Themulti-core microprocessor 1502 includes two pins denoted “P1” and “P2”.The configuration of the inter-die communication wires 118 of themulti-core microprocessor 1502 is as follows. The OUT pad of die 0 andthe IN 1 pad of die Tare coupled together via a single wire net that iscoupled to pin P2, and the OUT pad of die 1 and the IN 1 pad of die 0are coupled together via a single wire net that is coupled to pin P1.Additionally, inter-core communication wires 112 of the quad-core die1504 couple each core 106 to the other cores 106 of the die 1504 tofacilitate decentralized power management distributed among multipleprocessing cores 106 of a multi-core microprocessor 1502.

The cores 106 of FIG. 15 are configured to operate according to thedescription of FIG. 13 with the following understandings. First, eachdie itself has its cores organized and physically connected by sidebandwires in accordance with a two layer hierarchical coordination system.Die 0 has two pal kinship groups (core 0 and core 1; core 2 and core 3)and one buddy kinship group (core 0 and core 2). Likewise, die 1 has twopal kinship groups (core 4 and core 5; core 6 and core 7) and one buddykinship group (core 4 and core 6). Note that here, the buddy cores areconsidered buddies even though they are in the same die, contrary to thecharacterization of “buddy” stated with respect to FIG. 1 above.Moreover, the buddies communicate with each other in the embodiment ofFIG. 15 via the inter-core communication wires 112 rather than via theinter-die communication wires 118 of FIG. 12.

Second, the package itself defines a third hierarchical domain andcorresponding chum kinship group. Namely, core 0 and core 4 areconsidered chums even though they are in the same package 1502, contraryto the meaning of the term “chum” stated with respect to FIG. 12 above.Also, the chums communicate with each other in the embodiment of FIG. 15via the inter-die communication wires 118 rather than via theinter-package communication wires 1133 of FIG. 12.

Referring now to FIG. 16, a block diagram illustrating an alternateembodiment of a computer system 1600 that performs decentralized powermanagement distributed among multiple processing cores 106 of amulti-core microprocessor 1602 according to the present invention isshown. The system 1600 is similar in some ways to the system 1500 ofFIG. 15 in that it includes a single octa-core microprocessor 1602having eight cores 106 denoted core 0 through core 7. However, each die104 includes inter-core communication wires 112 between each of thecores 106 to enable each core 106 to communicate with each other core106 in the die 104. Thus, for purposes of description of operation ofthe microcode 208 of each core 106 of FIG. 16: (1) core 0, core 1, core2 and core 3 are considered pals, and core 4, core 5, core 6 and core 7are considered pals; (2) core 0 and core 4 are considered buddies.Accordingly, system 1600 is organized and physically connected bysideband wires in accordance with a two layer hierarchical coordinationsystem consisting of pal and buddy kinship groups. Moreover, theexistence of inter-core communication wires 112 between each of thecores of the die facilitates a peer-collaborative coordination model forthe pal kinship group that the die defines. Although capable ofoperating in accordance with a peer-collaborative coordination model,FIG. 17 describes a master-collaborative coordination model fordecentralized power management between the cores.

Referring now to FIG. 17, a flowchart illustrating operation of thesystem 1600 of FIG. 16 to perform decentralized power managementdistributed among the multiple processing cores 106 of the multi-coremicroprocessor 102 according to the present invention is shown. Morespecifically, the flowchart of FIG. 17 illustrates operation of thesync_cstate microcode 208 of FIG. 3 (and FIG. 6), similar to theflowchart of FIG. 4, which are alike in many respects, and like-numberedblocks are similar. However, the microcode 208 of the cores 106described in the flowchart of FIG. 17 accounts for the presence of eightcores 106 rather than the four cores 106 in the embodiment of FIG. 1,specifically the presence of four cores 106 is each of two dies 104, andthe differences are now described. In particular, each master core 106of a die 104 has three pal cores 106 rather than one pal core 106.

Flow begins in FIG. 17 at block 402 and proceeds through decision block404 and out of the “NO” branch of decision block 404 to decision block432 as described with respect to FIG. 4. However, FIG. 17 does notinclude blocks 406 through 418. Rather, flow proceeds from decisionblock 404 out of the “YES” branch to block 1706.

At block 1706, the sync_cstate microcode 208 induces a new instance ofthe sync_cstate routine on a pal by programming the CSR 236 of FIG. 2 tosend to its next pal the “A” value either received at block 402 orgenerated at block 1712 (discussed below) and to interrupt the pal. Thisrequests the pal to calculate and return a compound C-state to the core106. In the loop comprising blocks 1706, 1708, 1712, 414, and 1717, themicrocode 208 keeps track of which of the pals it has visited to insurethat it visits each of them (unless the condition at decision block 414is found to be true). Flow proceeds to block 1708.

At block 1708, the sync_cstate microcode 208 programs the CSR 236 todetect that the next pal has returned a compound C-state to the core 106and obtains the pal's compound C-state, denoted “B” in FIG. 17. Flowproceeds to block 1712.

At block 1712, the sync_cstate microcode 208 computes a newly calculatednative compound C-state by computing the minimum value of the “A” and“B” values, which is denoted “A.” Flow proceeds to decision block 1714.

At decision block 1714, if the “A” value computed at block 1712 is lessthan 2 or the core 106 is not the master core 106, flow proceeds toblock 1716; otherwise, flow proceeds to decision block 1717.

At block 1716, the sync_cstate microcode 208 returns to its caller the“A” value computed at block 1712. Flow ends at block 1716.

At decision block 1717, the sync_cstate microcode 208 determines whetherall of its pals have been visited, i.e., whether the core 106 hasexchanged compound C-states with each of its pals via blocks 1706 and1708. If so, flow proceeds to block 1719; otherwise, flow returns toblock 1706.

At block 1719, the sync_cstate microcode 208 determines the “A” valuecomputed at block 1712 to be its die composite C-state denoted “C” andflow proceeds to block 422 and continues on through to block 428 asdescribed above with respect to FIG. 4.

Flow proceeds from the “NO” branch of decision block 438 to decisionblock 1739.

At decision block 1739, the sync_cstate microcode 208 determines whetherall of its pals have been visited, i.e., whether the core 106 hasexchanged a compound C-state with each of its pals via blocks 1741 and1743 (discussed below). If so, flow proceeds to block 446 and continueson through to block 456 as described above with respect to FIG. 4;otherwise, flow proceeds to block 1741.

At block 1741, the sync_cstate microcode 208 induces a new instance ofthe sync_cstate routine on its next pal by programming the CSR 236 ofFIG. 2 to send to its next pal the “G” value computed either at block436 or at block 1745 (discussed below) and to interrupt the pal. Thisrequests the pal to calculate and return a compound C-state to the core106. In the loop comprising blocks 438, 1739, 1741, 1743, and 1745, themicrocode 208 keeps track of which of the pals it has visited to insurethat it visits each of them (unless the condition at decision block 438is found to be true). Flow proceeds to block 1743.

At block 1743, the sync_cstate microcode 208 programs the CSR 236 todetect that the next pal has returned a compound C-state to the core 106and obtains the pal's compound C-state, denoted “F” in FIG. 17. Flowproceeds to block 1745.

At block 1745, the sync_cstate microcode 208 computes a newly calculatednative compound C-state by computing the minimum value of the “F” and“G” values, which is denoted “G.” Flow returns to decision block 438.

FIG. 17 does not include block 478 through block 488. Instead, flowproceeds out of the “NO” branch of decision block 472 to decision block1777.

At decision block 1777, the sync_cstate microcode 208 determines whetherall of its pals have been visited, i.e., whether the core 106 hasexchanged a compound C-state with each of its pals via blocks 1778 and1782 (discussed below). If so, flow proceeds to block 474 and continueson through to block 476 as described above with respect to FIG. 4;otherwise, flow proceeds to block 1778.

At block 1778, the sync_cstate microcode 208 induces a new instance ofthe sync_cstate routine on a next pal by programming the CSR 236 of FIG.2 to send to its next pal the “L” value computed either at block 468 orat block 1784 (discussed below) and to interrupt the pal. This requeststhe pal to calculate and return a compound C-state to the core 106. Inthe loop comprising blocks 472, 1777, 1778, 1782, and 1784, themicrocode 208 keeps track of which of the pals it has visited to insurethat it visits each of them (unless the condition at decision block 472is found to be true). Flow proceeds to block 1782.

At block 1782, the sync_cstate microcode 208 programs the CSR 236 todetect that the next pal has returned a compound C-state state to thecore 106 and obtains the pal's compound C-state, denoted “M” in FIG. 17.Flow proceeds to block 1784.

At block 1784, the sync_cstate microcode 208 computes a newly calculatednative compound C-state by computing the minimum value of the “L” and“M” values, which is denoted “L.” Flow returns to decision block 472.

As stated earlier, FIG. 17 as applied to FIG. 16 illustrates anapplication of a master-mediated hierarchical coordination model to amicroprocessor 1602 whose sideband wires facilitate a peer-collaborativecoordination model for at least some of the core kinship groups. Thiscombination provides various advantages. On the one hand, the physicalstructure of the microprocessor 1602 provides flexibility in definingand redefining hierarchical domains and designating and redesignatingdomain masters, as described in connection with the section of Ser. No.61/426,470, filed Dec. 22, 2010, entitled “Dynamic and Selective CoreDisablement in a Multi-Core Processor,” and its concurrently filednonprovisional (CNTR.2536), which is herein incorporated by reference.Moreover, on a microprocessor providing such inter-core coordinationflexibility, a hierarchical coordination system may be provided that canact, depending on predefined circumstances or configuration settings, inmore than one coordination mode. For example, a hierarchicalcoordination system can preferentially employ a master-mediated model ofcoordination using designated master cores for a given kinship group,but, under certain predefined or detected conditions, designate adifferent core as a provisional master for that kinship group, oralternatively switch into a peer-collaborative coordination model for agiven kinship group. Examples of possible model-switching conditionsinclude the designated master core being unresponsive or disabled, thedesignated master being in a restricted interruption mode that restrictsinterrupts based upon their status or urgency, or the designated masterbeing in a state authorizing delegation of certain gatekeeping orcoordination roles to one or more of its constituents.

In the foregoing Figures, restricted power states, such as C-states >=2,have been illustrated that are implementable only if equal to thecomposite power state for the processor. In such cases, composite powerstate discovery processes have been described that are operable toaccount for the applicable power states of every core in the processorbefore implementing the restricted power state.

It will be understood, however, and as stated early in thespecification, that different configurations and classes of orderablepower states are contemplated. Moreover, very advanced sets of powerstates that include multiple domain-specific levels of restricted powerstates are also contemplated, where progressively higher levels ofrestricted power states would be applicable to progressively higherdomains of the processor.

For example, in a multi-core multiprocessor having multiple multi-coredies, each die providing a PLL to be shared amongst the cores of thedie, but a single VRM shared by all of the cores of the microprocessor,as illustrated for example in CNTR.2534, a domain-restricted power statehierarchy could be defined that included a first set of power statesspecifically applicable to resources internal, and not externallyshared, to a core, a next set of power states specifically applicable toresources (such as PLLs and caches) shared by cores on the die, but nototherwise shared outside of the die, and yet another set of power states(e.g., voltage values and the bus clock) specifically applicable to theentire microprocessor.

Accordingly, in one embodiment, each domain has its own composite powerstate. Also, for each domain, there is a single properly credentialedcore (e.g., the master of that domain) having authority to implement orenable implementation of a restricted power state that, as defined by acorresponding domain-differentiated power state hierarchy coordinationsystem, is limited in its impact to that domain. Such an advancedconfiguration is particularly well suited for embodiments, including forexample those shown in CNTR.2534, in which subgroups of the processor'scores share caches, PLLs, and the like.

Embodiments are also contemplated in which a decentralizedsynchronization process is used to manage not only implementation of arestricted power state, but also to selectively implement a wake stateor the repeal of a restricted power state in a manner that does notnecessarily wake up all of the cores. Such an advanced embodimentcontrasts with a system like that of FIG. 5, in which a chipset STPCLKdeassertion may fully wake up all of the cores.

Turning now to FIG. 23, a block diagram is depicted of one embodiment ofsync_state logic 2300, implemented for example in microcode, for bothconditionally implementing and selectively repealing a restrictedoperating state. As described below, the sync_state logic 2300 supportsimplementation of a domain-differentiated power state hierarchycoordination system. Advantageously, sync_state logic 2300 isextraordinarily scalable in that it can be extended to hierarchicalcoordination systems of practically any desired domain-level depth.Also, the logic 2300 may be implemented in not only a global fashion toa microprocessor as a whole, but also more restrictive fashions to onlyparticular groups of cores (e.g., only to the cores of a die asexplained, for example, in connection with block 2342 below) within amicroprocessor. Moreover, the sync_state logic 2300 may be appliedindependently to different groups of operating states, with differentcorrespondingly defined hierarchical coordination systems, applicableoperating states, and domain level thresholds.

In aspects similar to earlier illustrated embodiments of the sync_cstatemicrocode 208, the sync_state logic 2300 may be natively or externallyinvoked and is implemented in a routine that passes a probe state value“P.” For instance, a power state management microcode routine couldreceive a target operating state passed by an MWAIT instruction, or, asdiscussed in connection with CNTR.2534, generate a target operatingstate (such as a requested VID or frequency ratio value) utilizingnative core logic for the core. The power state management microcoderoutine could then save the target value as the core's target operatingstate O_(TARGET), and then invoke the sync_state logic 2300 by passingO_(TARGET) as the probe state value “P.” Alternatively, in aspectssimilar to those discussed in previous embodiments, the sync_state logic2300 may be invoked by an interrupt routine responding to an externallygenerated synchronization request. For simplicity, such instances arereferred to as externally-invoked instances of the sync_state logic2300.

Before proceeding further, it should be noted that FIG. 23, again forsimplicity, illustrates sync_state logic 2300 in a form suitable formanaging operating states defined or ordered in such a way thatprogressively greater degrees of inter-core coordination are requiredfor progressively higher requested states, as is applicable to C-states,for example. It will be understood that an ordinarily skilled artisancould, with carefully applied logic, modify the sync_state logic 2300 tosupport an operating state hierarchy (such as VID or frequency ratiostates) in which the operating states are defined in the oppositedirection. Alternatively, operating states that are, by convention orchoice, defined in one direction are, by definition, typically“orderable” in the opposite direction. Therefore, the sync_state logic2300 may be applied to operating states such as requested VID andfrequency ratio states simply by re-ordering them, and applyingoppositely-directed reference values (such as the negatives of theoriginal values).

It is also noted that FIG. 23 illustrates sync_state logic 2300particularly configured for a strictly hierarchical coordination system,in which all included kinship groups operate in accordance with amaster-mediated coordination model. As demonstrated with respect toearlier illustrated synchronization logic embodiments that accommodatesome degree of peer-to-peer collaboration, the invention should not beunderstood, unless and to the extent expressly so indicated, as beinglimited to strictly hierarchical coordination systems.

Flow begins at block 2302, where the sync_state logic 2300 receives theprobe state value “P.” Flow proceeds to block 2304, where the sync_statelogic 2300 also gets the native core's target operating stateO_(TARGET), the maximum operating state O_(MAX) implementable by thenative core, the maximum domain level D_(MAX) controlled by the nativecore, and the maximum available domain-specific state M_(D) that doesnot involve or interfere with resources outside of a given domain D. Itshould be noted that the manner, or chronology in which, the sync_statelogic 2300 obtains or calculates block 2304's values is not important.The position of block 2304 in the flow diagram serves merely tointroduce important variables applicable to the sync_state logic 2300.

In one illustrative but non-limiting embodiment, domain levels D aredefined as follows: 0 for a single core; 1 for a multi-core die; 2 for amulti-die package; and so on. Operating states of 0 and 1 areunrestricted (meaning a core may implement them without coordinationwith other cores), operating states of 2 and 3 are restricted withrespect to cores of the same die (meaning they may be implemented on thecores of a die subject to coordination with other cores on the die, butwithout requiring coordination with other cores on other dies), andoperating states of 4 and 5 are restricted with respect to cores of thesame package (meaning they may be implemented on that package aftercoordination with the cores of that package, but without requiringcoordination with other cores on other packages, if any), and so on. Thecorresponding maximum available domain-specific states M_(D) aretherefore: M₀=1; M₁=3; and M₂₌5. Furthermore, both the maximum domainlevel D_(MAX) controlled by a core and the maximum operating stateO_(MAX) implementable by the core are a function of that core's mastercredentials, if any. Therefore, in this example, a non-master core wouldhave a D_(MAX) of 0 and a corresponding maximum self-implementableoperating state O_(MAX) of 1; a die master core would have a D_(MAX) of1 and a corresponding maximum self-implementable operating state O_(MAX)of 3; and a package master or BSP core would have a D_(MAX) of 2 and acorresponding maximum self-implementable operating state O_(MAX) of 5.

Flow proceeds to block 2306, where the sync_state logic 2300 calculatesan initial compound value “B” equal to the minimum of the probe value“P” and the native core's target operating state O_(TARGET).Incidentally, if P is received from a subordinate kin core, and itsvalue is less than or equal to the maximum available domain-specificoperating state M_(D) which the kin core is credentialed to implement,then, based on the logic described herein, this generally indicates arequest by a subordinate kin core to repeal any potentially interferingsleepier states implemented by the native or a higher-ranked core. Thisis because, in a typical configuration, the subordinate kin core hasalready implemented the relatively more wakeful P state to the extent itso able, but it cannot unilaterally, without higher level coordination,repeal an interfering sleepier state implemented through a domain itdoes not control.

Flow proceeds to block 2308, where a domain level variable D isinitialized to zero. In the example illustrated above, a D of 0 refersto a core.

Flow proceeds to decision block 2310. If D is equal to D_(MAX), thenflow proceeds to block 2340. Otherwise, flow proceeds to decision block2312. For example, a sync_state routine invoked on a non-master corewill always proceed to block 2340 without implementing any of the logicshown between blocks 2312-2320. This is because the logic shown betweenblocks 2312-2320 is provided to conditionally synchronize subordinatekin cores of a master core. As another example, if a die master core hasno other master credentials, its D_(MAX) equals 1. Initially, D is 0, soa conditional synchronization process may be carried out on the othercores of the die, in accordance with blocks 2312-2320. But after anysuch synchronization is completed (assuming it is not conditionallyterminated sooner in accordance with decision block 2312), and D hasbeen incremented by one (block 2316), flow will proceed (throughdecision block 2310) to block 2340.

Turning now to decision block 2312, if B>M_(D), then flow proceeds todecision block 2314. Otherwise, flow proceeds to block 2340. To state itanother way, if the native core's currently calculated compound value Bwill not involve or interfere with resources outside of the domaindefined by variable D, there is no need to synchronize with any furthersubordinate kin cores. For example, if the currently calculated compoundvalue B is 1, a value that only impacts resources local to a given core,no further synchronization with subordinate kin cores is needed. Asanother example, suppose the native core is a chum core, with sufficientcredentials to turn off or impact resources that are common to multipledies. But assume also that the chum's currently calculated compoundvalue B is 3, a value that would only impact resources local to thechum's die, and not to other dies over which the chum is master. Supposealso that the chum has completed synchronization with each of the coreson its own die in accordance with blocks 2314, 2318, and 2320, causingvariable D to be incremented to 1 (block 2316), and bringing a newM_(D)=M₁=3 into consideration (block 2312). Under these circumstances,the chum does not need to further synchronize with subordinate kin cores(e.g., buddies) on other dies, because the chum's implementation of avalue of 3 or less would not affect the other dies anyway.

Turning now to decision block 2314, the sync_state logic 2300 evaluateswhether there are any (more) unsynched subordinate kin cores in thedomain defined by D+1. If there are any such cores, flow proceeds toblock 2318. If not, flow proceeds first to block 2316, where D isincremented, and then to decision block 2310, where the now incrementedvalue of D is evaluated, again, as discussed above.

Turning now to block 2318, because an unsynched subordinate kin core hasbeen detected (block 2318), which could be affected by implementation ofthe currently calculated compound value “B” (block 2312), because itwould affect resources shared by the subordinate kin core, the nativeinstance of the sync_state logic 2300 invokes a new, dependent instanceof the sync_state logic 2300 on the unsynched subordinate kin core. Thenative instance passes its currently calculated compound value “B” as aprobe value to the dependent instance of the sync_state logic 2300. Asevident by the logic of sync_state logic 2300, the dependent instancewill ultimately return a value that is no greater than the native valueof “B” (block 2306) and no less than the subordinate kin core's maximumavailable domain-specific state M_(D) (block 2346), which is the maximumvalue that would not interfere with any resources shared between thenative and subordinate kin cores. Accordingly, when flow proceeds toblock 2320, the native instance of the sync_state logic 2300 adopts thevalue returned by the dependent instance as its own “B” value.

Up until now, focus has been directed on the part of the sync_statelogic 2300 used to conditionally synchronize subordinate kin cores. Now,focus will be directed to blocks 2340-2348, which describes logic forimplementing a target and/or synchronized state, including conditionallycoordinating with superior kin cores (i.e., higher level masters).

Turning now to block 2340, the native core implements its currentcompound value “B” to the extent that it can. In particular, itimplements the minimum of B and O_(MAX), the maximum state implementableby the native core. It is noted that with respect to cores that aredomain masters, block 2340 configures such cores to implement or enableimplementation of the minimum of a composite power state for its domain(the “B” of block 2306 or 2320) and the maximum restricted power state(i.e., O_(MAX)) applicable to its domain.

Flow proceeds to decision block 2342, where the sync_state logic 2300evaluates whether the native core is the BSP for the microprocessor. Ifso, there are no superior cores to coordinate with, and flow proceeds toblock 2348. If not, flow proceeds to decision block 2344. It should benoted that in embodiments in which the sync_state logic 2300 is appliedto control operating states in less than a global way to themicroprocessor, block 2342 is modified by replacing “BSP” with “highestapplicable domain master” to which the predefined set of operatingstates pertains. For example, if the sync_state logic 2300 is appliedmerely to the application of desired frequency clock ratios to a PLLshared by a die described in CNTR.2534, then “BSP” would be replacedwith “die master.”

In decision block 2344, the sync_state logic 2300 evaluates whether thenative instance of sync_state was invoked by a master core. If so, thenthe native core has already, by definition, been synched with itsmaster, so flow proceeds to block 2348. If not, flow proceeds to block2346.

Turning now to block 2346, the sync_state logic 2300 invokes a dependentinstance of sync_state on its master core. It passes as the probe valueP the maximum of the core's last compound value B and core's maximumavailable domain-specific state M_(D). Two examples are provided toillustrate this selection of a probe value P.

In a first example, assume B is higher than the native core's maximumself-implementable operating state O_(MAX) (block 2340). In other words,the native core cannot unilaterally, without higher level coordination,cause full implementation of B. In such a circumstance, block 2346represents a petition by the native core to its master core, asking itto more fully implement B, if possible. It will be appreciated that themaster core, in accordance with the logic set forth in FIG. 23, willdecline the petition if it is not consistent with its own target stateand the applicable states of other potentially affected cores.Otherwise, the master core will implement the petition to the extent itis consistent with those states, up to a maximum of its own maximumself-implementable state O_(MAX) (block 2340). In accordance with block2346, the master core will also petition its own superior core, if any,with a value that is a compound of, and may be equal to, the originalcore's B value, and so on, all the way up through the hierarchy. In thisway, the sync_state logic 2300 fully implements the native core's lastcompound value B if applicable conditions are met.

In a second example, assume that B is lower than the native core'smaximum self-implementable operating state O_(MAX) (block 2340).Assuming that no higher, interfering operating state, affectingresources outside of the native core's control, is in effect, then thenative core has, in block 2340, fully implemented B. But if a higher,interfering operating state is in effect, then the native core cannotunilaterally repeal the interfering operating state. In such acircumstance, block 2346 represents a petition by the native core to itsmaster core, asking it to repeal an existing interfering operating stateto a level—i.e., the native core's maximum available domain-specificstate M_(D)—that no longer interferes with a complete implementation ofB. It will be appreciated that the master core, in accordance with thelogic set forth in FIG. 23, will comply with that petition, implementinga state that is no greater than, and which could be less than, thenative core's M_(D). It should be noted that block 2346 couldalternatively petition the master to simply implement B. But if B<M_(D),then this may cause the master core to implement a more wakeful statethan necessary to fully implement B for the native core. Accordingly,the use of a probe value equal to the maximum of the native core's lastcompound value B and native core's maximum available domain-specificstate M_(D) is preferred. Thus, it will be appreciated that thesync_state 2302 supports a minimalist approach to both sleep state andwake state implementation.

Turning now to block 2348, the sync_state 2300 logic returns a value tothe process that called or invoked it equal to the maximum of the core'slast compound value B and core's maximum available domain-specific stateM_(D). As explained with block 2346, it should be noted that block 2348could alternatively just return the value of B. But if B<M_(D), thenthis may cause an invoking master core (block 2318) to implement a morewakeful state than necessary for itself. Accordingly, the return of themaximum of the core's last compound value B and core's maximum availabledomain-specific state M_(D) is preferred. Again, it will be appreciatedthat, in this manner, the sync_state 2302 supports a minimalist approachto both sleep state and wake state implementation.

In another embodiment, one or more additional decision blocks areinterposed between blocks 2344 and 2346, further conditioning block2346's invocation of a dependent sync_state routine. For example, underone applicable condition, flow would proceed to block 2346 if B>O_(MAX).Under another applicable condition, flow would proceed to block 2346 ifan interfering operating state, repealable only at a higher domainlevel, is currently being applied to the native core. If neither ofthese two alternative conditions applied, then flow would proceed toblock 2346. In this manner, the sync_state 2302 would support an evenmore minimalist approach to wake state implementation. It should beobserved, however, that this alternative embodiment assumes that thenative core can detect whether an interfering operating state is beingapplied. In an embodiment where the native core cannot necessarilydetect the presence of an interfering operating state, then the lessconditional invocation approach depicted in FIG. 23 is preferred.

In will also be appreciated that in FIG. 23, composite operational statediscovery processes, when necessary for purposes of implementing atargeted deeper operational state (or shallower version thereof),traverse only cores (and not necessarily all of the cores) of thehighest level domain (which includes its nested domains) for which theresources affected by the targeted operational state are shared, using atraversal order that progressively traverses cores in alowest-to-highest (or nearest-to-farthest kinship group) order. Also,composite operational state discovery processes, when necessary forpurposes of implementing a shallower operational state, traverse onlythrough successively higher masters. Moreover, in the alternativeembodiment described immediately above, this traversal extends only asfar as is necessary to repeal a currently implemented interferingoperating state.

Thus, in applying an earlier exemplary illustration to FIG. 23, a targetrestricted power state of 2 of 3 would trigger a composite power statediscovery process only of cores in the applicable die. A targetrestricted power state of 4 of 5 would trigger a composite power statediscovery process only of cores in the applicable package.

FIG. 23 can be further characterized in a domain-specific (in additionto a core-specific) manner. Continuing with the exemplary illustrationabove, a die would have applicable domain-specific power states of 2 and3. If, for example, as part of an either natively or externallyinitiated composite power state discovery process, the die master corediscovers a composite power state for its die of only 1, then, because 1is not an applicable domain-specific power state, the die master corewould not implement it. If, as an alternative example, the die mastercore discovers a composite power state for its die of 5 (or a compoundof the die's composite power state and a nodally-connected core's probepower state value equal to 5), and if the die master core does not haveany higher master credentials, then (provided it has not already doneso) the die master core would implement or enable implementation of apower state of 3, which is the minimum of 3 (the die's maximumapplicable domain-specific power state) and 5 (the die's composite powerstate or a compound thereof). Again, it is noted that in this example,the die master core would proceed to implement or enable implementationof the power state of 3 for its die, regardless of any actual or partialcomposite power state (e.g., 2 or 4 or 5) applicable to a higher domainof which it is a part.

Furthering the illustration above, where a die master discovers a diecomposite power state or compound thereof of 5, the die master, inconjunction with its buddies, would undertake a composite power statediscovery process that would necessarily include, independently of thedie master's intermediate implementation, if any, of the power state of3 for its die, a traversal of the next higher-level domain (e.g., thepackage or the entire processor). This is because 5 is greater than 3,the die's maximum applicable domain-specific power state, soimplementation of a higher restricted power state would necessarilydepend on the power states applicable to one or more higher domains.Moreover, implementation of a higher restricted power state specific tothe next higher level domain could only be enabled and/or carried out bythe master of that domain (e.g., the package master for a multi-packageprocessor or the BSP of a single-package processor). It is worthreminding that the die master might also simultaneously hold therelevant package master or BSP credential.

Accordingly, in the example above, the die master core would, at somepoint in the discovery process, exchange its die composite power state(or a compound thereof) with a buddy. Under some conditions, thisdiscovery process would return to the die master core an at leastpartial composite power state for the higher domain (e.g., the package)that is less than 2. Yet this would not result in a repeal of the powerstate of 3 that the die master core had implemented for the die. Underother conditions, this discovery process would yield a composite powerstate (such as 4 or more) for the package or processor (or otherapplicable next higher domain) that corresponds to a restricted powerstate of 4 or more. If so, the master of that domain (e.g., the packagemaster) would implement a higher restricted power state that is aminimum of the higher level domain's composite power state (e.g., 4 or5) and the maximum restricted power state (here, 5) applicable to thehigher level domain. This conditional, domain-specific power-stateimplementation process would extend to yet higher domain levels, if any,if the applicable discovery process is testing an even higher restrictedpower state.

As seen above, FIG. 23 illustrates a hierarchical domain-specificrestricted power state management coordination system operable toincorporate domain-dependent restricted power states and associatedthresholds. According, it is adapted to fine-tuned domain-specificdecentralized approaches to power-state management of individual coresand groups of cores.

It will be noted that FIG. 23 illustrates power state coordination logicthat provides for transition to more wakeful states in a decentralized,distributed manner. However, it will be appreciated that somepower-state embodiments include power states from which a particularcore may be unable, absent prior power-state-repealing actions by thechipset or other cores, to wake. For example, in the C-statearchitecture described above, a C-state of 2 or higher may be associatedwith removal of the bus clock, which may disable a given core fromresponding to an instruction, delivered over the system bus, totransition into a more wakeful state. Other microprocessorconfigurations are contemplated in which power or clock sources may beselectively removed from a core or a die. FIG. 5 depicts an embodimentof arousal logic that adapts to these circumstances by waking up all ofthe cores in response to a STPCLK deassertion. More selectiveembodiments of arousal logic, however, are contemplated. In one example,arousal logic implemented by system software, such as an operatingsystem or BIOS, is contemplated wherein the system software would firstissue a wake or arousal request to a particular core, and if does notreceive a response, or the core does not comply, within an expected timeinterval, the logic reclusively issues wake or arousal requests tosuccessively higher masters, and potentially the chipset, as needed,until an expected response is received or appropriate compliance isdetected. This software-system implemented arousal logic would be usedin coordination with the power state coordination logic of FIG. 23 totransition to more wakeful states in a preferentially decentralizedmanner (where each targeted core initiates the transition using its ownmicrocode), to the extent that the cores are operable to do so, and in acentrally coordinated manner, when the cores are inhibited from doingso. This embodiment of arousal logic is just one illustrative andexemplary embodiment of several possible embodiments for selectivelyarousing cores that are unable to arouse themselves.

VI. Extended Embodiments and Applications

Although embodiments have been described having a particular number ofcores 106, other embodiments are contemplated with other numbers ofcores 106. For example, although the microcode 208 described in FIGS.10, 13, and 17 is configured to perform distributed power managementamong eight cores, the microcode 208 functions properly in a system withfewer cores 106 by including checks for the presence or absence of cores106, such as is described with respect to the section of Ser. No.61/426,470, filed Dec. 22, 2010, entitled “Dynamic Multi-CoreMicroprocessor Configuration,” and its concurrently filed nonprovisional(CNTR.2533), whose disclosure is attached hereto. That is, if a core 106is absent, the microcode 208 does not exchange C-state information withthe absent core 106 and effectively assumes the C-state of the absentcore would be the highest possible C-state (e.g., a C-state of 5). Thus,for the purpose of efficiency in manufacturability, the cores 106 may bemanufactured with microcode 208 configured to perform distributed powermanagement among eight cores even though the cores 106 may be includedin systems with fewer cores 106. Furthermore, embodiments arecontemplated in which the system includes more than eight cores and themicrocode described herein is extended to communicate with theadditional cores 106 in a manner similar to those already described. Byway of illustration, the systems of FIGS. 9 and 11 may be extended toinclude sixteen cores 106 having eight buddies, and the systems of FIGS.12, 14 and 15 may be extended to include sixteen cores 106 with fourchums analogous to the way in which the systems of FIGS. 9 and 11synchronize C-states between the four buddies, and the systems of FIG.16 may be extended to includes sixteen cores 106 by having sixteen pals(either eight cores per die by two dies, or four cores per die by fourdies), thereby synthesizing relevant features of the methods of FIGS. 4,10, 13, and 17.

Embodiments are also contemplated in which coordination of differentclasses of power states (e.g., C-states, P-states, requested VIDs,requested frequency ratios, etc.) are carried out independently. Forexample, each core may have a different applicable power state for eachclass of power states (e.g., a separate applicable VID, frequency ratio,C-states, and P-states), with different domain-specific restrictionsapplied thereto, and with different extremums used to compute compoundstates and discover composite states (e.g., minimums for C-states versusmaximums for requested VIDs). Different hierarchical coordinationsystems (e.g., different domain depths, different domain constituencies,different designated domain masters, and/or different kinship groupcoordination models) may be established for different classes of powerstates. Moreover, some power states may only require coordination, atmost, with other cores on a domain (e.g., the die) that includes only asubset of all of the cores on the micro-processor. For such powerstates, hierarchical coordination systems are contemplated that onlynodally link, coordinate cores within, and discover composite powerstates applicable to or within, that domain.

Generally, embodiments have been illustrated in which all of theoperating states are strictly and linearly orderable in a progressivelyascending or descending basis. But other embodiments are contemplated inwhich the operating states are tiered and orderable in ascending ordescending fashion along each tier (including embodiments in which tiersare orderable independently of other tiers). For example, a predefinedset of power states may be characterized in a composite form ofseparable tiers A.B, A.B.C, etc., where each of tiers A, B, C, etc.,relates to a different characteristic or class of characteristics. Forexample, a power state could be characterized in a composite form of C.Por P.C, where P refers to an ACPI P-state and C refers to an ACPIC-state. Furthermore, a class of restricted power states may be definedby the value of a particular component (e.g., A or B or C) of thecompositely defined power state, and another class of restricted powerstates may be defined by the value of another component of thecompositely defined power state. Moreover, within any given tier ofrestricted power states, where a tier refers to the value of one of thecomponents of the compositely defined power states, e.g., C.P, thevalues of another component, e.g., the P in C.P, may be unrestricted, orsubject to a different class of restrictions, for a given core than therestrictions that apply to the tier. For example, a core with a targetedpower state of C.P, where P refers to its P-state, and C refers to itsrequested C-state, may be subject to independent restrictions andcoordination requirements with respect to the implementation of the Cand P portions of its targeted power state. In composite power stateembodiments, an “extremum” of any two power states may refer, for agiven core calculating the extremum, a composite of extremums ofcomponent portions of the composite power states, or a composite ofextremums of fewer than all of the component portions of the compositepower state and, for the other component portions, otherwise selected ordetermined values.

Also, embodiments are contemplated in which the multiple cores 106 in asystem perform distributed, decentralized power management tospecifically perform power credit functionality as described in U.S.application Ser. No. 13/157,436 (CNTR.2517), filed Jun. 10, 2011, whichis hereby incorporated by reference in its entirety for all purposes,but using the inter-core communication wires 112, inter-diecommunication wires 118, and inter-package communication wires 1133rather than using a shared memory area as described in CNTR.2517.Advantages of such an embodiment are that it is transparent to systemfirmware (e.g., BIOS) and system software and does not require relianceon the system firmware or software to provide a shared memory region,which is desirable since the microprocessor manufacturer may not alwayshave the ability to control releases of the system firmware or software.

Also, embodiments of synchronization logic are contemplated that passother values in addition to a probe value. In one embodiment, asynchronization routine passes a value that distinguishingly identifiesthe discovery process of which it is a part, with respect to any othersimultaneously operating discovery processes. In another embodiment, thesynchronization routine passes a value by which the synched, ornot-yet-synched, cores may be identified. For example, an octa-coreembodiment may pass an 8-bit value where each bit represents aparticular core of the octa-core processor and each bit indicateswhether or not that core has been synched as part of the instantdiscovery process. The synchronization routine may also pass a valuethat identifies the core that initiated the instant discovery process.

Additional embodiments are also contemplated to facilitate synchronizeddiscovery processes that perform ordered traversals of the cores. In oneexample, each core stores bit masks identifying members of kinshipgroups of which it is a part. For example, in an octa-core embodimentutilizing a three-level deep hierarchical coordination structure, eachcore stores three 8-bit “kinship” masks, a “closest” kinship mask, asecond-tier kinship mask, and a top-tier kinship mask, where the bitvalues of each mask identify the kin, if any, belonging to the core inthe kinship group represented by the mask. In another example, each corestores a map, a Gödel number, or combinations thereof, from which thenodal hierarchy of the cores can be exactly and uniquely determined,including identifying each domain master. In yet another example, thecore stores information identifying shared resources (e.g., voltagesources, clock sources, and caches), and the particular cores orcorresponding domains to which they belong and are shared.

Also, while this specification focuses primarily on power statemanagement, it will be appreciated that various embodiments ofhierarchical coordination systems described above may be applied tocoordinate other types of operations and restricted activities, not justpower states or power-related status information. For example, in someembodiments, various of the hierarchical coordination systems describedabove are used, in coordination with decentralized logic duplicated oneach core, for dynamically discovering a multi-core microprocessor'sconfiguration, such as described, for example, in CNTR.2533.

Moreover, it should be noted that the present invention, does not,unless specifically so claimed, require use of any of the hierarchicalcoordination systems described above in order to perform predefinedrestricted activities. Indeed, the present invention is applicable,unless and to the extent otherwise specifically stated, to purelypeer-to-peer coordination systems between cores. However, as madeapparent by this specification, usage of a hierarchical coordinationsystem can provide advantages, particularly when relying on sidebandcommunications where the structure of the microprocessor's sidebandcommunication lines does not permit a fully equipotent peer-to-peercoordination system.

As may be observed from the foregoing, in contrast to a solution such asthat of Naveh described above which includes the centralized non-corehardware coordination logic (HCL), the decentralized embodiments inwhich the power management function is distributed equally among thecores 106 described herein advantageously requires no additionalnon-core logic. Although non-core logic could be included in a die 104,embodiments are described in which all that is required to implement thedecentralized distributed power management scheme is hardware andmicrocode completely physically and logically within the cores 106themselves along with the inter-core communication wires 112 inmulti-core-per-die embodiments, the inter-die communication wires 118 inmulti-die embodiments, and the inter-package communication wires 1133 inmulti-package embodiments. As a result of the decentralized embodimentsdescribed herein that perform power management distributed amongmultiple processing cores 106, the cores 106 may be located on separatedies or even separate packages. This potentially reduces die size andimproves yields, provides more configuration flexibility, and provides ahigh level of scalability of the number of cores in the system.

In yet other embodiments, the cores 106 differ in various aspects fromthe representative embodiment of FIG. 2 and provide, instead oraddition, a highly parallel structure, such as structures applicable toa graphics processing units (GPU), to which coordination systems asdescribed herein for activities such as power state management, coreconfiguration discovery, and core reconfiguration are applied.

While various embodiments of the present invention have been describedherein, it should be understood that they have been presented by way ofexample, and not limitation. It will be apparent to persons skilled inthe relevant computer arts that various changes in form and detail canbe made therein without departing from the scope of the invention. Forexample, software can enable, for example, the function, fabrication,modeling, simulation, description and/or testing of the apparatus andmethods described herein. This can be accomplished through the use ofgeneral programming languages (e.g., C, C++), hardware descriptionlanguages (HDL) including Verilog HDL, VHDL, and so on, or otheravailable programs. Such software can be disposed in any known computerusable medium such as semiconductor, magnetic disk, or optical disc(e.g., CD-ROM, DVD-ROM, etc.). Embodiments of the apparatus and methoddescribed herein may be included in a semiconductor intellectualproperty core, such as a microprocessor core (e.g., embodied in HDL) andtransformed to hardware in the production of integrated circuits.Additionally, the apparatus and methods described herein may be embodiedas a combination of hardware and software. Thus, the present inventionshould not be limited by any of the herein-described exemplaryembodiments, but should be defined only in accordance with the followingclaims and their equivalents. Specifically, the present invention may beimplemented within a microprocessor device which may be used in ageneral purpose computer. Finally, those skilled in the art shouldappreciate that they can readily use the disclosed conception andspecific embodiments as a basis for designing or modifying otherstructures for carrying out the same purposes of the present inventionwithout departing from the scope of the invention as defined by theappended claims.

We claim:
 1. A multi-die package for a microprocessor comprising: aplurality of dies; each die having a plurality of cores, including asingle master core; and a plurality of sideband non-system-bus inter-diecommunication wires communicatively coupling the dies to each other fora purpose of synchronizing power management; wherein the master core ofeach die is configured to use one and only one of the inter-diecommunication wires to transmit power management synchronizationmessages to each of the other master cores; wherein the master core ofeach die is configured to receive power management synchronizationmessages from each of the other master cores via one or more inter-diecommunication wires.
 2. The multi-die package of claim 1, wherein eachdie provides a single output pad and a plurality of input pads forconnecting to the inter-die communication wires.
 3. The multi-diepackage of claim 1, wherein each die provides at least two input padsfor connecting to the inter-die communication wires, enabling the dies,after manufacture, to be configured in both a two-die multi-coremicroprocessor and an X-die multi-core microprocessor, where X isgreater than or equal to three.
 4. The multi-die package of claim 1,further comprising a shift register at an end of each inter-diecommunication wire that is configured to accumulate a serial stream ofbits composing a power management synchronization message.
 5. Themulti-die package of claim 1, wherein the power managementsynchronization messages include a requested ratio of a bus blockfrequency to a core clock frequency or of a core clock frequency to abus clock frequency.
 6. The multi-die package of claim 1, wherein thepower management synchronization messages include a C-state requestvalue.
 7. The multi-die package of claim 1, wherein the power managementsynchronization messages include a P-state request value.
 8. Themulti-die package of claim 1, wherein the power managementsynchronization messages include a requested voltage identification(VID) value to indicate to a voltage regulator module.
 9. The multi-diepackage of claim 1, wherein each core includes read and write controland status registers configured for use in receiving and transmittingpower management synchronization messages with the other cores.
 10. Themulti-die package of claim 1, further comprising, for each core, powermanagement logic microcode native to that core, wherein each core isconfigured to respond to an operating system instruction to transitionto a target power management-related state by invoking the powermanagement logic microcode.
 11. The multi-die package of claim 1,wherein each core is configured to receive a power managementsynchronization message as an interrupt, and each core includesmicrocode that defines an inter-core interrupt handler configured tohandle an interrupt caused by a power management synchronization messagereceived from another core.
 12. A multi-die package for a microprocessorcomprising: a plurality of dies; each die having a plurality of cores,including a single master core; and a plurality of sidebandnon-system-bus inter-die communication channels communicatively couplingthe dies to each other to enable them to synchronize management ofresources shared by the dies; wherein each communication channel is aone-way channel with a single transmitting end and one or more receivingends, the channel being dedicated to enabling a single master core totransmit power management synchronization messages to the other mastercores, and the channel coupling the master core on its transmitting endto the one or more other master cores on their receiving ends; whereineach master core is connected on the transmitting end to a singlecommunication channel and on the receiving end to one or morecommunication channels; wherein each master core is configured totransmit power management synchronization messages to the one or moreother master cores using the single channel on which it can transmitpower management synchronization messages; wherein each master core isconfigured to receive power management synchronization messages from theone or more other master cores via the one or more communicationchannels to which it is connected on the receiving end.
 13. Themulti-die package of claim 12, wherein the inter-die communicationchannels comprise inter-die communication wires, and each die provides asingle output pad and a plurality of input pads for connecting to theinter-die communication wires.
 14. The multi-die package of claim 13,wherein each die provides at least two input pads for connecting to theinter-die communication wires, enabling the dies, after manufacture, tobe configured in both a two-die multi-core microprocessor and an X-diemulti-core microprocessor, where X is greater than or equal to three.15. The multi-die package of claim 12, further comprising a shiftregister at an end of each inter-die communication channel that isconfigured to accumulate a serial stream of bits composing a powermanagement synchronization message.
 16. The multi-die package of claim12, wherein the power management synchronization messages include one ormore of the following: a requested ratio of a bus block frequency to acore clock frequency or of a core clock frequency to a bus clockfrequency; a C-state request value. a P-state request value, and arequested voltage identification (VID) value to indicate to a voltageregulator module.
 17. The multi-die package of claim 12, wherein eachcore includes read and write control and status registers configured foruse in receiving and transmitting power management synchronizationmessages with one or more master cores.
 18. The multi-die package ofclaim 12, further comprising, for each core, power management logicmicrocode native to that core, wherein each core is configured torespond to an operating system instruction to transition to a targetpower management-related state by invoking the power management logicmicrocode.
 19. The multi-die package of claim 1, wherein each core isconfigured to receive a power management synchronization message as aninterrupt, and each core includes microcode that defines an inter-coreinterrupt handler configured to handle an interrupt caused by a powermanagement synchronization message received from another core.